2015-08-12 1 views
1

Je veux poster ma liste d'objet à mon contrôleur.Toute meilleure façon de publier la liste des objets de classe sur le contrôleur

Ceci est mon fichier de classe:

public class MyModel 
    { 
     public int Id {get; set;} 
     public List<ChildModel> ChildModelObject{ get; set; } 
    } 

public class ChildModel 
    { 
     public int ChildId {get; set;} 
     public int sum {get; set;} 
    } 

Ma Voir Page:

@model Demo.MyModel 

     @using (Html.BeginForm()) 
     { 
      @{ int i = 0; } 
      @foreach (var item in Model.ChildModelObject) //first I am displaying value and then on submit i will post this value 
      { 
       <input type="hidden" name="@Html.Raw("ChildModelObject[" + i + "].ChildId")" value="@item.ChildId" /> //This is how i am taking value and it is working perfect and i am getting childid. 
      @Html.DisplayFor(modelItem => item.sum) 
      } 
<input type="submit" value="Save"/> 
     } 

Controller:

public ActionResult Index(MyModel model)//In this i want all childid when form is posted 
     { 
     } 

Alors maintenant, quand je clique sur le bouton d'envoi alors je veux tout childid dans mon MyModel objet.

Quelqu'un peut-il me dire une meilleure approche alors ce que je fais ??

+1

Vous avez 2 options: utilisez la boucle 'for' pour avoir l'itérateur ou utilisez' EditorTemplates' –

+0

@teovankot: Pouvez-vous publier vos réponses s'il vous plaît et je ne veux pas utiliser de variable supplémentaire et si possible, utilisez les contrôles cachés du rasoir –

+1

N'utilisez pas une boucle 'foreach' - utilisez' for (int i = 0; i m.ChildModelObject [i] .ChildId) @ Html.DisplayFor (m => m.ChildModelObject [i] .sum)} ' –

Répondre

1

Vous devez créer éditeur de modèle pour votre classe ChildModel comme ceci:

@model Demo.ChildModel 

@Html.HiddenFor(x => x.ChildId) 
@Html.DisplayFor(x => x.sum) 

Placez-le dans le dossier Views/Shared/EditorTemplates (ou dans votre EditorTemplates contrôleur) et nommez-le ChildModel.cshtml

Et vous peut l'utiliser comme ceci:

@model Demo.MyModel 

@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x=>x.ChildModelObject) 
    <input type="submit" value="Save"/> 
} 

Notez que vous n'avez pas besoin d'un y boucles MVC génère lui-même des liaisons de droite

+2

Vous devez indiquer clairement que le modèle doit être nommé 'ChildModel.cshtml' –

+0

@StephenMuecke yeap, vous avez raison –