我想编辑下面的对象。我希望UsersSelectedList使用UsersGrossList中的一个或多个用户填充。
在mvc中使用标准的edit-views,我只得到映射的字符串和布尔值(下面没有显示)。 我在谷歌上找到的许多例子都使用了mvc框架的早期版本,而我使用的是官方1.0版本。
赞赏该观点的任何例子。
public class NewResultsState
{
public IList<User> UsersGrossList { get; set; }
public IList<User> UsersSelectedList { get; set; }
}
答案 0 :(得分:8)
假设用户模型具有Id和Name属性:
<%= Html.ListBox("users", Model.UsersGrossList.Select(
x => new SelectListItem {
Text = x.Name,
Value = x.Id,
Selected = Model.UsersSelectedList.Any(y => y.Id == x.Id)
}
) %>
或使用View Model
public class ViewModel {
public Model YourModel;
public IEnumerable<SelectListItem> Users;
}
控制器:
var usersGrossList = ...
var model = ...
var viewModel = new ViewModel {
YourModel = model;
Users = usersGrossList.Select(
x => new SelectListItem {
Text = x.Name,
Value = x.Id,
Selected = model.UsersSelectedList.Any(y => y.Id == x.Id)
}
}
查看:
<%= Html.ListBox("users", Model.Users ) %>
答案 1 :(得分:6)
将Html.ListBox与IEnumerable SelectListItem结合使用
查看
<% using (Html.BeginForm("Category", "Home",
null,
FormMethod.Post))
{ %>
<%= Html.ListBox("CategoriesSelected",Model.CategoryList )%>
<input type="submit" value="submit" name="subform" />
<% }%>
控制器/型号:
public List<CategoryInfo> GetCategoryList()
{
List<CategoryInfo> categories = new List<CategoryInfo>();
categories.Add( new CategoryInfo{ Name="Beverages", Key="Beverages"});
categories.Add( new CategoryInfo{ Name="Food", Key="Food"});
categories.Add(new CategoryInfo { Name = "Food1", Key = "Food1" });
categories.Add(new CategoryInfo { Name = "Food2", Key = "Food2" });
return categories;
}
public class ProductViewModel
{
public IEnumerable<SelectListItem> CategoryList { get; set; }
public IEnumerable<string> CategoriesSelected { get; set; }
}
public ActionResult Category(ProductViewModel model )
{
IEnumerable<SelectListItem> categoryList =
from category in GetCategoryList()
select new SelectListItem
{
Text = category.Name,
Value = category.Key,
Selected = (category.Key.StartsWith("Food"))
};
model.CategoryList = categoryList;
return View(model);
}
答案 2 :(得分:1)
@ eu-ge-ne&lt;非常感谢你的答案 - 找到一种从模型中多选一个值列表的方法真的很麻烦。 使用您的代码我在编辑/更新页面中使用了ListBoxFor Html控件,并在保存时将整个模型传递回我的控制器(包括多个选定的值)。
<%= Html.ListBoxFor(model => model, Model.UsersGrossList.Select(
x => new SelectListItem {
Text = x.Name,
Value = x.Id,
Selected = Model.UsersSelectedList.Any(y => y.Id == x.Id)
}
)%&gt;