我在 MVC4 的下拉列表中进行不显眼的验证时遇到了可怕的困难。
我看到的主要症状是 data-val 属性未呈现在下拉元素上。
根本原因是 DropDownFor 正在查看编辑器模板的模型,该模型没有任何验证属性。验证在父对象属性/主模型上。我在这篇文章中使用@DarinDimitrov 建议的下拉实现:https ://stackoverflow.com/a/17760548/89092
有没有人知道基于模型值实现下拉框的模式,该模型值是带有选定标志的密钥对列表并经过不显眼的验证?
我希望能够Html.GetUnobtrusiveValidationAttributes()
在编辑器模板中调用,附加属性并保留我拥有的代码 - 但对于我的生活,我无法弄清楚如何从中获取任何数据 - 我认为这是因为我此时拥有的 ViewData.ModelMetadata 的范围是 DropDownValues 类型,而不是具有修饰属性 test_dd 的主模型,但如果有人知道将什么谜语输入这个小黑盒子,那就太好了。
我的模型:
...
[Required]
[UIHint("SelectListItemDD")]
public DropDownValues test_dd { get; set; }
...
这是 DropDownValues 视图模型
public class DropDownValues : IDropDownValues
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
我的编辑器模板视图模型
@model DropDownValues
@{
string initial = (ViewData.ModelMetadata).AdditionalValues["InitialValue"] as string;
}
@{if (Model != null && Model.Items != null && Model.Items.Count() > 0)
{
@Html.DropDownListFor(x => x.SelectedValue,
new SelectList(Model.Items, "Value", "Text"), initial)
}
}