C# ASP.NET中的MVC-使用IEnumerable显示值而不是Id<;选择列表项>;

C# ASP.NET中的MVC-使用IEnumerable显示值而不是Id<;选择列表项>;,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,这个问题在StackOverflow上有一个答案,但它已经存在5年多了,我不确定这是最好的还是唯一的方法,特别是因为我已经有了一个字典类型的对象——一个 我有一个ViewModel: public class SummaryList { public List<Summary> Summaries { get; set; } public IEnumerable<SelectListItem> Managers { get; set; } pub

这个问题在StackOverflow上有一个答案,但它已经存在5年多了,我不确定这是最好的还是唯一的方法,特别是因为我已经有了一个字典类型的对象——一个

我有一个ViewModel:

public class SummaryList
{
    public List<Summary> Summaries { get; set; }
    public IEnumerable<SelectListItem> Managers { get; set; }

    public SummaryList()
    {
        Managers = new DAL.GetManagersAsSelectListItem();
    }
}
在用户可以编辑此ViewModel的页面上,显示了
摘要
对象的整个
列表
,我可以执行以下操作:

@model MyProject.ViewModels.SummaryList

@using (Html.BeginForm("SummaryListSave", "Controller", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    if (Model != null)
    {
        if (Model.Summaries.Count > 0)
        {
          <table>
            <thead>...</thead>

            <tbody>
                @for (int i = 0; i < Model.Summaries.Count; i++)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(m => m.Summaries[i].WhateverProperty)
                        </td>
                        <td>
                            @Html.DropDownListFor(m => m.Summaries[i].ManagerId, Model.Managers)
                        </td>
                    </tr>
                 }
             </tbody>

           </table>
         }
     }
 }
@model MyProject.ViewModels.SummaryList
@使用(Html.BeginForm(“SummaryListSave”、“Controller”、FormMethod.Post))
{
@Html.AntiForgeryToken()
如果(型号!=null)
{
如果(Model.Summaries.Count>0)
{
...
@对于(int i=0;im.Summaries[i].WhateverProperty)
@DropDownListFor(m=>m.Summaries[i].ManagerId,Model.Managers)
}
}
}
}
i、 e.我可以为每一行显示一个DropDownList,它采用
ManagerId
,因为我提供了IEnumerable
Managers
,所以它对ddl选项和保存编辑进行双向绑定

我希望执行与此相同的操作,但只显示值,因此不使用下拉列表,而不是显示
ManagerId
我希望从
SelectListItem

Html
帮助程序中是否没有使用我已经存在/填充的SelectListItem执行此操作的机制?我尝试了
DisplayTextFor
和其他一些方法,但没有成功

如果不存在,那么使用可枚举函数实现某些东西的最简单方法是什么


我的第一个想法是将参数包装在一行
@Html.DisplayFor(m=>m.OutbreakSummaries[i].WeeklymeetGleadId)
,它将在一个函数中给出Id,该函数从
模型中获取值。管理者
,但我不知道从何处开始使用语法。

我不能100%肯定我理解,但是您是否尝试在视图中使用(SelectList),并在控制器中创建SelectList时指示值和文本属性? 像这样:

[Key]
public int Id { get; set; }
... OtherProperties ...
public int ManagerId { get; set; }
public IEnumerable<SelectListItem> Managers { get; set; }
查看:

@Html.DropDownListFor(m => m.Summaries[i].ManagerId, (SelectList) Model.Managers)
Model.Managers = new SelectList(new DAL.GetManagersAsSelectListItem(), "ManagerID", "Description");
控制器:

@Html.DropDownListFor(m => m.Summaries[i].ManagerId, (SelectList) Model.Managers)
Model.Managers = new SelectList(new DAL.GetManagersAsSelectListItem(), "ManagerID", "Description");
用Manager VM中的不动产名称替换说明(用于文本)
当这样配置时,DropDownList应该显示文本而不是值(id)。

谢谢!这有助于我在
编辑
视图上取得进展,但我也希望能够将
文本
作为普通的
显示
在普通的
详细信息
视图上(因此显示文本,但不在下拉列表中)。您的摘要视图模型中没有Manager对象属性吗?如果有,在视图中的每个循环上,您都可以显示其任何属性:@Html.DosplayFor(m=>m.Summaries[i].Manager.Id)@Html.DosplayFor(m=>m.Summaries[i].Manager.Description)在控制器的Detail函数中,您可以将相应的管理器添加到每个摘要中。不,我没有为管理器对象创建单独的类ViewModel,我只是在主
摘要
类上有
Id
列表。我想这就是我出问题的地方。它是有目的的,但却使其他事情难以实施。