web-dev-qa-db-fra.com

Passer un modèle entier lors de la soumission du formulaire

Je comprends que je peux utiliser @Html.HiddenFor(m => m.parameter) et lorsque le formulaire est soumis, ce paramètre est transmis au contrôleur. Mon modèle a beaucoup de propriétés. 

Existe-t-il un moyen plus rapide de transmettre le modèle entier en une fois au contrôleur ou dois-je le faire un par un à chaque fois?

20
jpo

Le modèle sera transmis au contrôleur dans son intégralité, mais les valeurs des propriétés qui ne sont pas liées par des champs de saisie ou masqués seront perdues. 

Vous devez soit lier les propriétés du formulaire côté client, soit extraire à nouveau l'entité côté serveur.

Vous semblez demander quelque chose comme @Html.HiddenFor(m => m.Model), et ce n'est pas possible. Pardon

Une chose à garder à l'esprit, si vous avez des tonnes de champs cachés, vous envoyez peut-être plus de données à la vue que nécessaire. Pensez à utiliser des modèles de vue

23
Forty-Two

Pour tous ceux qui regardent cela, vous pouvez faire un @ Html.EditorForModel () dans un div caché. Vous devez également utiliser @ Html.EditorFor (model => model.ObjectProperty) pour chaque propriété d'objet du modèle.

<div hidden="hidden">
  @Html.EditorForModel()
  @Html.EditorFor(model => model.ObjectProperty)
  @Html.EditorFor(model => model.ListOfObjectsProperty)
</div>
2
Jason McGraw

Le modèle entier sera publié si vous utilisez un élément FORM. Vos éléments utilisant le modèle doivent évidemment être à l'intérieur de l'élément de formulaire

Vous pouvez également POST la forme vous-même dire en utilisant JQuery 

Voir cet autre problème de pile pour cela: jQuery AJAX submit form

Regardez attentivement la réponse de "Alfrekjv"

0
sacha

Ceci est déjà intégré. Considérez ce modèle:

public class MyModel
{
    public string PropertyA { get; set; }
    public string parameter { get; set; }
}

et considérons maintenant cette action:

[HttpPost]
public ActionResult PostSomeData(MyModel model)
{
}

MVC utilisera la FormCollection et complétera la classe MyModel où elle le pourra Si vous n'avez pas la PropertyA dans le formulaire, ce sera alors null. Mais puisque vous avez une input pour la propriété parameter, elle sera renseignée.

0
Mike Perrenoud