2012-07-12 49 views
0

我似乎無法弄清楚這一點,它讓我瘋狂!EditorTemplate +模型不在POST上返回

本質上,我有一列我需要顯示每行一個下拉列表。

我有一個視圖模型:

public class UserMembershipViewModel:BaseViewModel 
{ 
    public List<ProgramMembership> ProgramMembership { get; set; } 
} 

在我父視圖我有,因爲你可以看到我使用它位於「/Views/Shared/EditorTemplates/ProgramMembership.cshtml」編輯模板:

@using AcnCS.Model 
@model AcnCS.Model.ViewModels.User.UserMembershipViewModel 
@{ 
    ViewBag.PageHeader = "Membership for " + Model.User.FullName; 
    ViewBag.PageTitle = "Membership for " + @Model.User.FullName; 
    ViewBag.HideNav = true; 
} 

    @if (Model.ProgramMembership != null) 
    { 
     <div class="row-fluid"> 
      <div class="span12"> 
       <div id="permissions"> 
        @using (Html.BeginForm()) 
        { 
         <table class="table table-bordered"> 
          <thead> 
           <tr> 
            <td>Program</td> 
            <td>Effective Membership?</td> 
            <td>Permission Type</td> 
           </tr> 
          </thead> 
          @Html.EditorFor(m => Model.ProgramMembership, "ProgramMembership") 

         </table> 
         <input type="submit" class="btn btn-primary" value="Save Changes"/> 
        } 

       </div> 

      </div> 
     </div> 
    } 

我的編輯模板(ProgramMembership.cshtml)是:

@using AcnCS.Model 
@model List<AcnCS.Model.ProgramMembership> 

@foreach(ProgramMembership membership in Model) 
{ 
    <tr> 
     <td>@membership.ProgramName</td> 
     <td> 
      @if (membership.IsMember) 
      { 
       <span class="label label-success">@membership.IsMember</span> 
      } 
      else 
      { 
       @membership.IsMember 
      } 
     </td> 
     <td>@Html.DropDownListFor(x => membership.PermissionType, membership.PermissionTypes)</td> 
    </tr> 
} 

一切是顯示正確,但是當我提交時,我的模型對象爲null,即使模型中的ProgramMembership屬性爲null:

[HttpPost] 
    public ActionResult Membership(UserMembershipViewModel model) 
    { 

     // model IS NULL!! 

     return View(model); 
    } 

任何幫助將不勝感激!

回答

1

我會以複數的屬性名,因爲它是一個集合,爲更好的可讀性

public class UserMembershipViewModel:BaseViewModel 
{ 
    public List<ProgramMembership> ProgramMemberships { get; set; } 
} 

,你不需要一個循環的EditorTemplate文件

@model AcnCS.Model.ProgramMembership 
<tr> 
    <td>@membership.ProgramName</td> 
    <td> 
     @if (membership.IsMember) 
     { 
     <span class="label label-success">@membership.IsMember</span> 
     } 
     else 
     { 
     @membership.IsMember 
     } 
    </td> 
    <td>@Html.DropDownListFor(x => membership.PermissionType, membership.PermissionTypes)</td> 
</tr> 

裏面在你的主視圖,請致電EditorTemplate like this

@Html.EditorFor(m=>m.ProgramMemberships) 
+0

謝謝!這似乎工作 – TheWebGuy 2012-07-12 19:39:41

+0

@戈登:你是歡迎。很高興我能幫上忙 :) – Shyju 2012-07-12 19:44:10