【发布时间】:2013-11-01 17:03:36
【问题描述】:
我在 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)
}
}
【问题讨论】:
-
您的 Value 属性确实是字符串吗?可能是 SelectedValue 应该是一个 int。
-
谢谢@Romias option标签上的value属性会是一个字符串,这是一种代码,就像产品代码一样,内部文本是描述,因此是字典的底层模型。但是将其更改为 int 然后稍后查找可以解决问题,然后我就全神贯注了:-)
标签: c# asp.net-mvc asp.net-mvc-4 unobtrusive-validation html.dropdownlistfor