当值在数组中时选定的MVC 5 Razor html.Drodown listfor集

当值在数组中时选定的MVC 5 Razor html.Drodown listfor集

我正在用C#和.NET Framework4.6.1开发ASP.NETMVC 5应用程序。

我有这个View:

@model MyProject.Web.API.Models.AggregationLevelConfViewModel[...]@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType,
 (SelectList)Model.HelperCodeTypeItems, new { id = "Configurations[0].HelperCodeType" })

这个ViewModel是:

public class AggregationLevelConfViewModel{
    private readonly List<GenericIdNameType> codeTypes;
    private readonly List<GenericIdNameType> helperCodeTypes;

    public IEnumerable<SelectListItem> CodeTypeItems
    {
        get { return new SelectList(codeTypes, "Id", "Name"); }
    }

    public IEnumerable<SelectListItem> HelperCodeTypeItems
    {
        get { return new SelectList(helperCodeTypes, "Id", "Name"); }
    }

    public int ProductionOrderId { get; set; }

    public string ProductionOrderName { get; set; }

    public IList<Models.AggregationLevelConfiguration> Configurations { get; set; }

    public AggregationLevelConfViewModel()
    {
        // Load CodeTypes to show it as a DropDownList
        byte[] values = (byte[])Enum.GetValues(typeof(CodeTypes));

        codeTypes = new List<GenericIdNameType>();
        helperCodeTypes = new List<GenericIdNameType>();

        for (int i = 0; i < values.Length; i++)
        {
            GenericIdNameType cType = new GenericIdNameType()
            {
                Id = values[i].ToString(),
                Name = EnumHelper.GetDescription((CodeTypes)values[i])
            };

            if (((CodeTypes)values[i]) != CodeTypes.NotUsed)
                codeTypes.Add(cType);

            helperCodeTypes.Add(cType);
        }
    }}



但我不能把它放进去new SelectList(codeTypes, "Id", "Name");new SelectList(helperCodeTypes, "Id", "Name");因为所选的值在Configurations数组:字段AggregationLevelConfiguration.CodeTypeAggregationLevelConfiguration.HelperCodeType.

我想我必须在视图中设置选定的值,但是我不知道如何去做。

如何设置选定的值?


尚方宝剑之说
浏览 527回答 3
3回答

达令说

不幸的是@Html.DropDownListFor()在循环中呈现控件时,其行为与其他帮助程序略有不同。这以前曾在CodePlex上被报道为一个问题(不确定它是一个bug还是一个限制)用于解决此问题的are 2选项,以确保根据模型属性选择正确的选项。备选案文1(使用EditorTemplate)创建自定义EditorTemplate用于集合中的类型。创建部分/Views/Shared/EditorTemplates/AggregationLevelConfiguration.cshtml(注意,名称必须与类型的名称匹配。@model&nbsp;yourAssembly.AggregationLevelConfiguration@Html.DropDownListFor(m&nbsp;=>&nbsp;m.HelperCodeType,&nbsp;(SelectList)ViewData["CodeTypeItems"])....&nbsp; //&nbsp;other&nbsp;properties&nbsp;of&nbsp;AggregationLevelConfiguration然后在主视图中,传递SelectList到EditorTemplate如additionalViewData@using&nbsp;(Html.BeginForm()){ &nbsp;&nbsp;... &nbsp;&nbsp;@Html.EditorFor(m&nbsp;=>&nbsp;m.Configurations&nbsp;,&nbsp;new&nbsp;{&nbsp;CodeTypeItems&nbsp;=&nbsp;Model.CodeTypeItems&nbsp;}) &nbsp;&nbsp;...备选案文2(生成一个新的SelectList在每次迭代中,并设置selectedValue)在此选项中,您的财产CodeTypeItems应该是IEnumerable<GenericIdNameType>,而不是SelectList(或者只是让codeTypes(公共财产)然后在主视图中@Html.DropDownListFor(m&nbsp;=>&nbsp;m.Configurations[0].HelperCodeType,&nbsp;new&nbsp;SelectList(Model.CodeTypeItems,&nbsp;"Id",&nbsp;"Name",&nbsp; Model.Configurations[0].HelperCodeType)附带说明:没有必要使用new { id = "Configurations[0].HelperCodeType"--DropDownListFor()方法已经生成了id属性
打开App,查看更多内容
随时随地看视频慕课网APP