编辑:凡固定我的问题,使代码显示正确的,谢谢! :)检索在MVC3从强类型的视图动态复选框值和标签
我有一个愚蠢的问题,我真的需要帮助索姆,谷歌上搜索我接近失去我的头一整天后!
我用asp.net成员的工作,我希望能够在用户设定的角色,一旦web应用程序是UPP和运行。
为了实现这个我送了一个模型来一个强类型的视图与复选框列表,如果用户在复选框被选中在列表中的角色之一。 (这部分工作)
但我无法弄清楚如何编辑方法返回的复选框值,如在列表属性模型返回“零”。
我相信我已经错过了一些明显的这里,并且将是任何帮助非常高兴......
和我如何可以将代码添加到这个问题?我不能得到正确的格式...
查看
@model Mvc4m.Models.UserRoles
@{
ViewBag.Title = "Edit";
}
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>UserRoles</legend>
<div class="editor-label">
<h2> @Html.DisplayFor(model => model.Name)</h2>
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Roles)
</div>
<div class="editor-field" id="testar">
@foreach (var model in Model.AllRolles)
{
@Html.CheckBoxFor(item => model.IsActive, model.Role)
@Html.Label(model.Role)
}
</div>
<div class="editor-label">
@Html.LabelFor(model => model.IsApproved)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.IsApproved)
@Html.ValidationMessageFor(model => model.IsApproved)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
控制器
public List<AllRolles> UserActiveRoles(string name)
{
var list = new List<AllRolles>();
foreach(var role in Roles.GetAllRoles())
{
var hej = new AllRolles()
{
Role = role,
IsActive = Roles.IsUserInRole(name,role)
};
list.Add(hej);
}
return list;
}
public ActionResult Index()
{
var roles = Roles.GetAllRoles();
var users = from MembershipUser u in Membership.GetAllUsers()
select new UserRoles()
{
Name = u.UserName,
AllRolles = UserActiveRoles(u.UserName)
};
return View(users);
}
public ActionResult Edit(string name)
{
var user = Membership.GetUser(name);
var model = new UserRoles()
{
Name = user.UserName,
AllRolles = UserActiveRoles(name)
};
return View(model);
}
//
// POST: /Admin/ManageUsers/Edit/5
[HttpPost]
public ActionResult Edit(UserRoles user)
{
var name = user.Name;
foreach (var role in user.AllRolles)
{
if (role.IsActive == true)
Roles.AddUserToRole(name,role.Role);
else
Roles.RemoveUserFromRole(name,role.Role);
}
return RedirectToAction("Index");
}
模式
public class UserRoles
{
public string Name { get; set; }
public List<string> Roles { get; set; }
public bool IsApproved { get; set; }
public List<AllRolles> AllRolles { get; set; }
}
namespace Mvc4m.Areas.Admin.Models
{
public class AllRolles
{
public string Role { get; set; }
public bool IsActive { get; set; }
}
}
您可以通过4个空格缩进它格式化任何文本代码 - 有关更多详细信息,请参阅[help](http://stackoverflow.com/editing-help)。 – 2012-03-23 21:24:29
而不是使用foreach可以使用for循环,并在您的CheckBoxFor使用Models.AllRoles [i] .IsActive。那样我就会相信在结果视图中输出AllRoles [0] .IsActive,然后在发布时正确绑定。 – dreza 2012-03-23 21:27:04