Jquery UI对话框中的客户端数据注释未触发

时间:2014-08-16 02:25:58

标签: c# jquery asp.net-mvc data-annotations

我有一个部分视图加载到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对话框中起作用?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我找到了上述问题的解决方案,并希望此解决方案对其他人有用。

我们需要为表单注册不显眼的验证。在我的例子中,我在JQuery Dialog中加载此表单。所以我将以下代码添加到打开的对话框中。

  .load(url,function(response,text,request)

                    {

                        $('#detailsfrm').removeData('validator');

                        $('#detailsfrm').removeData('unobtrusiveValidation');

                        $.validator.unobtrusive.parse('#detailsfrm');

                    });

执行此操作将启用自定义客户端验证以触发