我正在嘗試創建一個編輯視圖,該視圖由一些用戶配置文件詳細信息和用戶分配到的角色列表組成。我認爲我可以創建一個可編輯的父視圖,該視圖將包含所有用戶配置文件文本框,並插入一個可保存所有角色複選框的局部視圖。如何在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>
我想什麼是找到一種方法,使這兩個視圖更新相同的模式,這可能然後發送給控制器。任何幫助將不勝感激。
如果您使用'Hidden'方法而不是'HiddenFor',則可以指定字段的名稱,而不是MVC爲您執行。或者,我認爲'HiddenFor'已經超載了,所以你可以用這種方式指定 –