在我的C#,MVC4 .NET WebApplication中,我有一个自定义助手,它有以下方法调用:
@Custom.DropDownListFor(m => m.CategorySetups[categoryId].Gender, CategoryHelper.Genders, new { @class = "form-control" })
内部类似于:
@Html.DropDownListFor(expression, new SelectList(items, "Value", "Text"))
因为我在这里覆盖了SelectListItem。
此调用未选择存储在
中的渲染视图中的值m.CategorySetups[categoryId].Gender
如果我以这种方式调用方法(不在同一视图中):
@Custom.DropDownListFor(m => m.Gender, CategoryHelper.Genders, new { @class = "form-control" })
呈现的HTML具有标记为
的正确值<option value="Under15" selected>Under15</option>
所以我的猜测是,这与选择的属性的嵌套有关,但是我没有看到它。
从调试中我可以看到,
m.CategorySetups[categoryId].Gender
在应该选择时会设置正确的值。
注意:不确定这是否会导致问题(因为它的第二种工作方式)但绑定值类型为Enum。
评论时更新:
实施如下:
public static readonly List<SelectListItem<ClassificationType>> ClassificationTypes = new List<SelectListItem<ClassificationType>>
{
new SelectListItem<ClassificationType> {Text = @"please select...", Value = ClassificationType.NotSet},
new SelectListItem<ClassificationType> {Text = EnumParser.GetString(ClassificationType.Under13), Value = ClassificationType.Under13},
new SelectListItem<ClassificationType> {Text = EnumParser.GetString(ClassificationType.Under15), Value = ClassificationType.Under15},
new SelectListItem<ClassificationType> {Text = EnumParser.GetString(ClassificationType.Under18), Value = ClassificationType.Under18},
new SelectListItem<ClassificationType> {Text = EnumParser.GetString(ClassificationType.Over30), Value = ClassificationType.Over30},
new SelectListItem<ClassificationType> {Text = EnumParser.GetString(ClassificationType.Open), Value = ClassificationType.Open}
};
答案 0 :(得分:1)
SelectList
构造函数的overload带有参数object selectedValue
,您需要指定所选的值,正常DropDownListFor()
我们这样做:
@Html.DropDownListFor(m=>m.Gender,
new SelectList(Model.Genders,"Id","Value",Model.Gender),
new { @class = "form-control" })
在您的情况下,您可以这样做:
@Custom.DropDownListFor(m => m.CategorySetups[categoryId].Gender,
new SelectList(CategoryHelper.Genders,"Value","Text",Model.CategorySetups[categoryId].Gender),
new { @class = "form-control" })
更重要的是,当您通过Enum
填充项目时,您可以使用我在this answer