2013-03-20 1 views
16

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

Y at-il un moyen plus court de passer tout le modèle à la fois au contrôleur ou dois-je le faire un par un à chaque fois?

Répondre

17

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 d'entrée ou masqués seront perdues.

Vous devez soit lier les propriétés dans le formulaire côté client, soit réextraire l'entité côté serveur.

Vous semblez demander quelque chose comme @Html.HiddenFor(m => m.Model), et ce n'est pas possible. Une chose à garder à l'esprit, si vous avez des tonnes de champs cachés, vous pouvez envoyer plus de données à la vue que vous avez vraiment besoin. Envisagez d'utiliser des modèles de vue

0

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

Vous pouvez également poster le formulaire vous dire en utilisant JQuery

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

Jetez un oeil de près . le anwser par "Alfrekjv"

1

Ceci est déjà construit en inspirer de ce modèle:

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

et maintenant co nsider cette action:

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

MVC exploitera la FormCollection et remplir la classe MyModel où il peut. Si vous n'avez pas le PropertyA dans le formulaire, ce sera null. Mais puisque vous avez un input pour la propriété parameter il sera rempli.

1

Pour quelqu'un d'autre qui regarde 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> 
0

Vous pouvez vérifier que les propriétés que vous voulez:

if (this.ModelState.IsValidField("Name")) 
{ 
    // ..... 
} 

au lieu de:

if (this.ModelState.IsValid) 
{ 
    // ..... 
} 
Questions connexes