我正在尝试显示之前选择的选项列表。
我的模型看起来像:
public IEnumerable<SelectListItem> ChildrenOptions { get; set; }
public List<Guid> ChildrensId { get; set; }
在控制器中,我使用列表中的MultiSelectList填充IEnumerable,然后将其传递给模型
MyModel.ChildrenOptions = new MultiSelectList(myList, "Id", "Name");
return View(myModel);
所以,如果我在我的视图中写作
@Html.DisplayFor(modelItem => item.Children, item.ChildrenOptions)
它显示Guid / Id,但我想显示名称列表。 如果我用一个foreach循环List,那么我就有了Guids。
有什么想法吗?
我已经访问了一些有用的相关信息的帖子:
答案 0 :(得分:1)
如果您只需要显示名称列表,则不需要MultiSelectList
,因为您不会使用下拉列表。您只需要获取所有选择了ID的名称:
在您的视图中,在显示名称之前:
IEnumerable<string> names = item.ChildrenOptions.Where(child => item.ChildrenId.Cast<string>().Contains(child.Value)).Select(child => child.Text);
但是,最好为您的列表/详细信息视图创建另一个视图模型,将MultiSelectList
替换为IEnumerable<string>
(如果您愿意,可以将此属性添加到现有视图模型中),为了评估您的控制器中的列表。您的视图中噪音较少,而且您专注于显示名单:
在您的控制器中:
myOtherModel.ChildrenOptionNames = myList.Where(child => myOtherModel.ChildrenId.Contains(child.Id)).Select(child => child.Name);
return View(myOtherModel);
在您的观点中:
@Html.DisplayFor(model => model.ChildrenOptionNames) // It will iterate over your list and display each name
或者如果您需要应用一些特殊格式:
@for(int index = 0; index < Model.ChildrenOptionNames.Count; index++)
{
// apply some formatting, like putting <ul> / <li>
@Html.DisplayFor(model => model.ChildrenOptionNames[index]);
}