2013-05-31 108 views
0

我正在嘗試創建一個編輯視圖,該視圖由一些用戶配置文件詳細信息和用戶分配到的角色列表組成。我認爲我可以創建一個可編輯的父視圖,該視圖將包含所有用戶配置文件文本框,並插入一個可保存所有角色複選框的局部視圖。如何在ASP.NET MVC中創建可編輯的局部視圖

但是,我發現當我嘗試更新部分視圖中的文本框時,這些更改未反映在父模型中。顯然,部分視圖會獲得與父級視圖隔離的自己的ViewData字典。

我想知道是否有人有一個解決方案,允許我將部分視圖中的複選框所做的更改傳回給父級模型。我在下面列出了一些示例代碼。這裏是父視圖:

@model MvcWebsite.ViewModels.UserProfileEditViewModel 

@{ 
ViewBag.Title = "Edit"; 
} 

<h2>Edit</h2> 

@using (Html.BeginForm()) { 
@Html.AntiForgeryToken() 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>UserProfile</legend> 

    @Html.HiddenFor(model => model.UserId) 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.UserName) 
    </div> 

... other properties of the user profile omitted for brevity 

    <div class="editor-field"> 

     @Html.Partial("RoleCheckBoxEditTable", Model.Roles) 
    </div> 
    <p> 
     <input type="submit" value="Save" /> 
    </p> 
</fieldset> 
} 

<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 

然後,我們有孩子局部視圖:

@model List<MvcWebsite.ViewModels.RoleViewModel> 

<table> 
<tr> 
    @{ 
     int count = 0; 
     foreach (var roleViewModel in Model) 
     { 
      if(count++ % 3 == 0) 
      { 
       @: </tr> <tr> 
      } 
      <td> 
       @Html.HiddenFor(r => roleViewModel.RoleName) 
       @Html.HiddenFor(r => roleViewModel.RoleId) 
       @Html.CheckBoxFor(r => roleViewModel.Assigned) 
      </td> 
      <td> 
       @Html.LabelFor(r => roleViewModel.Assigned, roleViewModel.RoleName) 
      </td> 
     } 
    } 

</tr> 
</table> 

我想什麼是找到一種方法,使這兩個視圖更新相同的模式,這可能然後發送給控制器。任何幫助將不勝感激。

+0

如果您使用'Hidden'方法而不是'HiddenFor',則可以指定字段的名稱,而不是MVC爲您執行。或者,我認爲'HiddenFor'已經超載了,所以你可以用這種方式指定 –

回答

0

我通過完全消除部分視圖並將其替換爲顯示和編輯器模板來解決此問題。

從你的信息查看的RoleViewModel該名單上的東西,並創建名爲RoleViewModel.cshtmlViews/Shared/EditorTemplates下一個新的視圖(您可能需要先創建EditorTemplates目錄,如果你以前從未使用過它)。

在您的頂級視圖,改變PartialEditorFor像這樣:@Html.EditorFor(model => model.Roles)

這種方法適用於我,它保留的驗證,我得到通過我的模型的IValidatable接口出爐。

+0

Hi Graham,我以前就是這麼想的,我只能爲RoleViewModel創建一個EditorTemplate。實際上,我想爲RoleViewModel列表創建一個EditorTmplate,該列表將對應於List ,這是角色屬性的實際類型。 – MickySmig

相關問題