部分视图上的MVC自定义验证

时间:2015-10-21 12:20:44

标签: jquery model-view-controller partial-views unobtrusive-validation

我有2个局部视图。 编辑页面包含列var1,var2,var3。 编辑部分包含列varA,varB,var2,var3。

<div id="page-property" style="display:none;">
@Html.Partial("EditPage", new xxx.Domain.Entities.Page())
</div>
<div id="section-property" style="display:none">
@Html.Partial("EditSection", new xxx.Domain.Entities.Section())
</div>

对var2和var3进行首次自定义客户端验证测试(均为局部视图): 当var2 = var3时,EditPage自定义验证显示错误消息。 当var2 = var3时,EditSection自定义验证不会显示错误消息。

对EditPage(var1,var2)和EditSection(varA,varB)进行第二次自定义客户端验证测试: 当var1 = var2时,EditPage自定义验证显示错误消息。 当varA = varB时,EditSection自定义验证显示错误消息。

// The unlike function
$.validator.addMethod(
    'unlike',
   function (value, element, params) {
       console.debug(element);
       if (!this.optional(element)) {
           var otherProperty = $('#' + params.otherproperty)
           return (otherProperty.val() != value);
       }
       return true;
   });

$.validator.unobtrusive.adapters.add(
    'unlike', ['otherproperty', 'otherpropertyname'], function (options) {
        var params = {
            otherproperty: options.params.otherproperty,
            otherpropertyname: options.params.otherpropertyname
        };
        options.rules['unlike'] = params;
        options.messages['unlike'] = options.message;
    });

由于两个局部视图的列名相同,因此第二个局部视图验证看起来不起作用。知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我认为这是一个糟糕的设计,我认为你可以有一个基类

public class baseclass
{
var2,var3}

public class page
{

public baseclass base{get;set;}
var 1
}

public class section{
vara,varb,
public baseclass base{get;set;}
}

然后根据您的观点,您需要使用

editorFor(x=>x.base, Model.base)

并且您的编辑器将正常包含该类。

因此,您将保留验证