0

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

我的模型看起来像:

 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 循环列表,那么我只有指南。

任何想法?

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

4

1 回答 1

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]);
}
于 2013-11-08T12:23:38.340 回答