2013-06-27 4 views
0

un outerViewModel et à l'intérieur de celui-ci deux ViewModels, lorsque je tente de lier innermodel je reçois nulle pour toutes les propriétés ...MVC4 Nested ViewModel La liaison ne fonctionne pas j'ai

est le code ici:

**Models.cs** 

public class OuterModel 
{ 
    public FirstInnerModel firstInnerModel; 
    public SecondInnerModel secondInnerModel; 
} 

public class FirstInnerModel 
{ 
    public string Title; 
} 

public class SecondInnerModel 
{ 
    public string Title; 
} 

Index.cshtml

  @using (Html.BeginForm("ActivateFirst", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
     { 

       @Html.ValidationSummary(true) 

       <fieldset> 

        <div class="editor-label"> 
         @Html.LabelFor(model => model.firstInnerModel.Title) 
        </div> 
        <div class="editor-field"> 
         @Html.EditorFor(model => model.firstInnerModel.Title) 
         @Html.ValidationMessageFor(model =>   model.firstInnerModel.Title) 
        </div> 
        <p> 
         <input type="submit" value="Create" /> 
        </p> 
       </fieldset> 
     } 

HomeController.cs

public ActionResult Index() 
    { 
     ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application."; 

     var model = new OuterModel() 
     { 
      firstInnerModel = new FirstInnerModel(), 
      secondInnerModel = new SecondInnerModel() 
     }; 

     return View(model); 
    } 

    [HttpPost] 
    public void ActivateFirst(FirstInnerModel ggg) 
    { 


    } 

ggg.Title retourne null ...

Tout le monde? Aidez-moi!

+0

Si vous passez dans le '' OuterModel' à ActivateFirst' obtenez-vous vos données ? – James

+0

salut! :) non ... bothInnerModel et secondInnerModel sont null – user2355293

+0

Vous devrez peut-être avoir un champ caché sur votre formulaire pour 'OuterModel' afin qu'il puisse être transmis au contrôleur. – James

Répondre

3

Lorsque vous soumettez le formulaire il affichera le OuterModel au contrôleur afin que vous devez faire quelque chose comme:

[HttpPost] 
    public void ActivateFirst(OuterModel ggg) 
    { 
     var whatever = ggg.FirstInnerModel.Title; 

    } 
Questions connexes