我有一个部分视图加载到JQuery UI Dialog中。所有数据注释都按预期触发。但自定义验证没有解决。
模型对象:
Public class Model
{
public IEnumerable<SelectListItem> Primary { get; set; }
[Required]
public string SelectedPrimaryID { get; set; }
public IEnumerable<SelectListItem> Secondary { get; set; }
[TwoFieldCompare("SelectedPrimaryID", ErrorMessage = "X and Y cannot be same.")]
public string SelectedSecondaryID{ get; set; }
}
客户端验证:调试器正在使用此方法
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule()
{
ValidationType = "twofieldcompare",
ErrorMessage = this.ErrorMessage
};
rule.ValidationParameters.Add("dependentproperty", dependentProperty);
yield return rule;
}
在customJquery文件中,我添加了以下代码:
//数据注释客户端
$.validator.addMethod(
'twofieldcompare',
function (value, element, params) {
var dependentProperty = params.dependentProperty;
debugger;
// Check for the condition and return true or false
});
$.validator.unobtrusive.adapters.add(
'twofieldcompare', ['dependentproperty'],
function (options) {
var params = {
dependentProperty: options.params.dependentproperty
};
options.rules['twofieldcompare'] = params;
options.messages['twofieldcompare'] = options.message;
});
问题:
调试器没有达到客户端验证。
所有Jquery库在Master Layout中都被称为包。
我是否需要添加任何其他引用以使客户端数据注释在Jquery UI对话框中起作用?
提前感谢您的帮助。
答案 0 :(得分:1)
我找到了上述问题的解决方案,并希望此解决方案对其他人有用。
我们需要为表单注册不显眼的验证。在我的例子中,我在JQuery Dialog中加载此表单。所以我将以下代码添加到打开的对话框中。
.load(url,function(response,text,request)
{
$('#detailsfrm').removeData('validator');
$('#detailsfrm').removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse('#detailsfrm');
});
执行此操作将启用自定义客户端验证以触发