【发布时间】:2016-09-21 07:50:44
【问题描述】:
我正在使用 C# 和 .NET Framework 4.6.1 开发一个 ASP.NET MVC 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);
}
}
}
而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, "Id", "Name"); }
}
public IEnumerable<SelectListItem> HelperCodeTypeItems
{
get { return new SelectList(helperCodeTypes, "Id", "Name"); }
}
但我无法在new SelectList(codeTypes, "Id", "Name"); 或new SelectList(helperCodeTypes, "Id", "Name"); 中设置它,因为所选值在Configurations 数组中:字段AggregationLevelConfiguration.CodeType 和AggregationLevelConfiguration.HelperCodeType。
我想我必须在视图中设置选定的值,但我不知道该怎么做。
如何设置选定的值?
【问题讨论】:
-
在循环中使用
DropDownListFor()是一个不幸的限制。您需要在每次迭代中生成一个新的MutliSelectList(在构造函数中设置selectedValues属性),或者(更好)使用EditorTemplatefor typeofAggregationLevelConfiguration并将SelectList作为@ 传递给模板987654339@ -
谢谢。我明白我必须使用东西,但我不知道如何使用它们。
-
我试图找到一个答案,我在大约 6 个月前给出了两个选项的代码,但没有任何运气。如果我找不到它,我会在一个小时左右添加一个答案 - 但以下应该有效 -
@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.HelperCodeTypeItems, "Value", "Text", Model.Configurations[0].HelperCodeType, new { ... }) -
我正在研究使用 jQuery 选择选项的解决方案。
-
是的,这行得通。谢谢。
标签: c# asp.net-mvc razor