c# – 当值在数组中时选择的MVC5 Razor html.dropdownlist for set

c# – 当值在数组中时选择的MVC5 Razor html.dropdownlist for set,第1张

概述我正在使用C#和.NET Framework 4.6.1开发ASP.NET MVC 5应用程序. 我有这个观点: @model MyProject.Web.API.Models.AggregationLevelConfViewModel[...]@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, (SelectLis 我正在使用C#和.NET Framework 4.6.1开发ASP.NET MVC 5应用程序.

我有这个观点:

@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,"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);        }    }}

而Models.AggregationLevelConfiguration是:

public class AggregationLevelConfiguration{    public byte AggregationLevelConfigurationID { get; set; }    public int ProductionorderID { get; set; }    public string name { get; set; }    public byte CodeType { get; set; }    public byte HelperCodeType { get; set; }    public int PkgRatio { get; set; }    public int RemainingCodes { get; set; }}

我需要在这些属性中设置选定的值:

public IEnumerable<SelectListItem> CodeTypeItems{    get { return new SelectList(codeTypes,"name"); }}public IEnumerable<SelectListItem> HelperCodeTypeItems{    get { return new SelectList(helperCodeTypes,"name"); }}

但我无法在新的SelectList中设置它(codeTypes,“ID”,“name”);或新的SelectList(helperCodeTypes,“name”);因为所选值位于Configurations数组中:fIElds AggregationLevelConfiguration.CodeType和AggregationLevelConfiguration.HelperCodeType.

我想我必须在VIEw中设置选定的值,但我不知道该怎么做.

如何设置所选值?

解决方法 不幸的是,在循环中渲染控件时,@ HTML.DropDownListFor()的行为与其他助手的行为略有不同.这已经被报道为CodePlex上的一个问题(不确定它是否是一个错误或只是一个限制)

解决此问题的2选项是为了确保根据model属性选择正确的选项

选项1(使用EditorTemplate)

为集合中的类型创建自定义EditorTemplate.在/VIEws/Shared/EditorTemplates/AggregationLevelConfiguration.csHTML中创建一个部分(注意名称必须与该类型的名称匹配)

@model [email protected](m => m.HelperCodeType,(SelectList)VIEwData["CodeTypeItems"]).... // other propertIEs of AggregationLevelConfiguration

然后在主视图中,将SelectList作为additionalVIEwData传递给EditorTemplate

@using (HTML.BeginForm()){  ...  @HTML.EditorFor(m => m.Configurations,new { CodeTypeItems = Model.CodeTypeItems })  ...

选项2(在每次迭代中生成一个新的SelectList并设置selectedValue)

在此选项中,您的属性CodeTypeItems应该是IEnumerable< GenericIDnameType>,而不是SelectList(或者只是使codeType成为公共属性).然后在主视图中

@HTML.DropDownListFor(m => m.Configurations[0].HelperCodeType,new SelectList(Model.CodeTypeItems,"name",Model.Configurations[0].HelperCodeType)

附注:不需要使用新的{ID =“Configurations [0] .HelperCodeType” – 已经生成了该属性的DropDownListFor()方法

总结

以上是内存溢出为你收集整理的c# – 当值在数组中时选择的MVC5 Razor html.dropdownlist for set全部内容,希望文章能够帮你解决c# – 当值在数组中时选择的MVC5 Razor html.dropdownlist for set所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1246837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存