2017-09-15 2 views
-1

Ce n'est pas un thread dupliqué. Mon cas est d'envoyer un paramètre de tableau sans modèle. mais autre thread est send int, paramètre de chaîne individuelle.Existe-t-il une méthode de formulaire post-array sans modèle?

Je sais comment publier sur le contrôleur avec un objet modèle.
Mais parfois, je veux publier des données en dehors du modèle db et publier dans un objet de format ou tableau Comment pourrais-je faire?

Voir

<form action="/home/showdata" method="post"> 
    <input type="text" name="arr.username" /> 
    <input type="text" name="arr.password" /> 
    <input type="text" name="arr.email" /> 
</form> 

Contrôleur

public class HomeController : Controller 
{ 
    [HttpPost] 
    public ActionResult ShowData(Array data) 
    { 
     return Content(data.username + data.password + data.email); 
    } 
} 
+2

Pourquoi voulez-vous faire cela sans un modèle? – DavidG

+0

parce que certains champs ne sont pas dans la table de la base de données. –

+2

Qu'est-ce que la base de données a à voir avec le modèle affiché ici? – DavidG

Répondre

2

Il y a beaucoup de différents types de Models. Par exemple. Donc, dans votre cas, les données que vous recevez du client sont significativement différentes du modèle de base de données (ce qui, d'ailleurs, est généralement le cas). Cela signifie que vous devez créer un modèle spécifique à une vue, View Model, puis, après avoir validé les données, transférer ces données au modèle de base de données. Par exemple:

public class SampleViewModel { 
    public int Id { get; set;} 
    public string Name { get; set; } 
} 

Et puis dans votre contrôleur:

public IHttpActionResult SampleActionMethod(SampleViewModel model) { 
    if (!ModelState.IsValid) { 
      return BadRequest(); 
    } 
    var sampleDbModel = new SampleDatabaseModel() { 
      FullName = model.Name, 
      ProductId = model.Id, 
      // ... some other properties ... 
    }; 
    // ... Save the sampleDbModel ... 
    return Ok(); // .. or Created ... 
} 

Cela répond à vous montre à quel point faire ce que vous essayez de faire. Mais idéalement, vous ne devez PAS utiliser le modèle de base de données comme paramètre pour les méthodes d'action. Et il y a beaucoup d'autres choses en jeu, pour lesquelles je vous suggère de regarder Repository Pattern, Unit Of Work (pour la gestion des tâches de base de données), et Automapper (pour le mappage des choses, si vous voulez, par exemple voir les modèles aux modèles) Espérons que cela aide .

+1

Oh je me méprends pour le modèle à toujours être le modèle de base de données. Merci –

0

La meilleure solution est d'utiliser un modèle. Un modèle ne doit pas nécessairement être associé à une table de base de données.

public ActionResult ShowData(Array data) 

pourrait être:

public ActionResult ShowData(YourModelNameHere data) 

Et vous pouvez définir YourModelNameHere quelque chose comme:

public class YourModelNameHere 
{ 
    public string username {get; set;} 
    public string password {get; set;} 
    public string email {get; set;} 
} 
+1

Je me méprends pour le modèle à toujours être le modèle de base de données. Merci beaucoup. –

1

Bonjour je vous recomended FormCollection

<form action="/home/showdata" method="post"> 
    <input type="text" name="username" /> 
    <input type="text" name="password" /> 
    <input type="text" name="email" /> 
</form> 

dans le contrôleur, vous pouvez utiliser FormCollection

public class HomeController : Controller 
{ 

    [HttpPost] 
    public ActionResult ShowData(FormCollection data) 
    { 
     string username=data.GetValues("username")[0]; 
     string password=data.GetValues("password")[0];  
      string email=data.GetValues("email")[0]; 

     return Content(username + password + email); 
    } 
} 

également si une entrée html a le même nom alors vous obtiendrez tableau de chaînes de leur valeur.

+0

si vous ne voulez vraiment pas utiliser le modèle, vous pouvez transmettre des données avec FormCollection –

+0

Salut! c'est cool aussi. –

-4

D'abord, vous devez sérialiser vos données sur le formulaire et conserver les données sérialisées dans un fichier caché et après la publication de ces données à partir de formcollection en utilisant la clé et désérialiser .

+0

Cette réponse n'a rien à voir avec la question posée. Également sérialiser des données dans un champ caché est complètement inutile. – DavidG