MVC に問題があるので、説明してみます。私のモデルには2つのクラスがあります。
public class ApplicationPermissionVM
{
public ApplicationPermission Permission { get; set; }
public bool IsSelected { get; set; }
}
public class RoleAndPermissonsModel
{
//Constructor skipped
public ApplicationRole ApplicationRole { get; set; }
public IEnumerable<ApplicationPermissionVM> Permissions { get; set; }
}
2 番目のモデルがメイン モデルで、コントローラーでモデルを初期化します。ApplicationRole が null で、リストに 19 個の要素があります。フォームを POST すると、ApplicationRole メンバーが作成されますが、アクセス許可リストが空になるため、すべての選択が失われます。誰かが問題が何であるかを知っているなら、私に書いてください。コントローラ:
[HttpGet]
public ActionResult NewRole()
{
_model = new RoleAndPermissonsModel();
return View(_model);
}
[HttpPost]
public ActionResult NewRole(RoleAndPermissonsModel newRole)
{
if (ModelState.IsValid)
{
var id = _applicationRoleService.AddNewRole(newRole.ApplicationRole);
_applicationRoleService.AssignPermissionsToRole(newRole.SelectedItems, id);
}
return RedirectToAction("Index");
}
意見:
@model EO.Core.WebUI.Models.RoleAndPermissonsModel
@using (Html.BeginForm("NewRole", "PermissionRole", FormMethod.Post, new { id = "frmNewRole" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>ApplicationRole</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ApplicationRole.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ApplicationRole.Name)
@Html.ValidationMessageFor(model => model.ApplicationRole.Name)
</div>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.IsSelected)
</th>
<th></th>
</tr>
@foreach (var item in Model.Permissions)
{
<tr>
<td>
@Html.EditorFor(modelItem => item.IsSelected)
</td>
<td>
@Html.DisplayFor(modelItem => item.Permission.Name);
</td>
</tr>
}
</table>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}