显示在MVC中选择的选项列表

时间:2013-11-08 11:01:58

标签: c# asp.net-mvc-4 razor

我正在尝试显示之前选择的选项列表。

我的模型看起来像:

 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。

有什么想法吗?

我已经访问了一些有用的相关信息的帖子:

1 个答案:

答案 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]);
}