編輯:凡固定我的問題,使代碼顯示正確的,謝謝! :)檢索在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