我在mvc 3中有一个自定义的DateTextBoxControl。该控件用作
@Html.DateTextBoxFor(x => x.ActiveParty.PartyDetail.InUSASince,
new { @class = "span-7 data date-picker", @maxlength = 10 })
在模型中,我正在为属性InUSASince添加验证属性
[RequiredWhen("NationalityId", new object[] { Nationality_USA },
true, ErrorMessage = "Date Field is Required.")]
public virtual DateTime? InUSASince { get; set; }
我已经注册了不显眼的javascript验证器
$.validator.unobtrusive.adapters.add("requiredwhen", ["dependentproperty",
"expectedvaluefordependentproperty", "reverse"], function (options)
{
var expectedvaluefordependentproperty = null;
var reverse = options.params.reverse;
if (options.params.expectedvaluefordependentproperty.length != 0)
{
expectedvaluefordependentproperty = options. params.
expectedvaluefordependentproperty.split(',');
var prefix = getModelPrefix(options.element.name);
dependentproperty = options.params.dependentproperty,
fullOtherName = appendModelPrefix(dependentproperty, prefix),
element = $(options.form).find(":input[name='" + fullOtherName + "']");
options.rules["jqRequiredwhen"] = { dependentelement: element,
expectedvaluefordependentproperty:
expectedvaluefordependentproperty, reverse: reverse };
if (options.message) {
options.messages["jqRequiredwhen"] = options.message; }
}
});
当我运行页面时。它没有显示任何验证消息。当我采取观察源。我可以看到控件没有与验证相关的属性。
谁知道我错过了什么?感谢。
答案 0 :(得分:2)
最后我想到了遗漏的东西。在DateTextBoxFor的用户控件扩展中,我没有采用为InUSASince属性定义的Unobtrusive Validation Attributes。
要做到这一点,我们必须使用这些代码行。
ModelState modelState;
if (htmlHelper.ViewData.ModelState.TryGetValue(fullName, out modelState))
{
if (modelState.Errors.Count > 0)
{
tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName);
}
}
var attr = htmlHelper.GetUnobtrusiveValidationAttributes(fullName, modelMetaData);
tagBuilder.MergeAttributes(attr);
这将为自定义控件添加验证属性。
我希望这对某些人有用。