从视图中有条件地调用Remote方法以在MVC4中进行验证

时间:2012-09-11 11:32:25

标签: jquery asp.net-mvc-4 unobtrusive-ajax

我正在更新MVC2应用程序,以便它在新的MVC4范例中工作。我试图弄清楚如何调用一个方法来使用不显眼的ajax验证输入字段?我需要弄清楚某个值在数据库中是否是唯一的(由服务包装)。我已经将服务方法映射出来了,我只需要能够调用它...通常这就是我要做的。

HospitalFinNumber: {
                    required: function (element) {
                        debugger;
                        return '@isFlagSet' != 'True'; //$('AddEnc').val() === 'AddEnc';
                    },
                    minlength: 6,
                    remote: function () {
                        //debugger;
                        return {
                            url: '@Url.Action("ValidateHosFin", "EditEncounter")',
                            data: { hospitalFin: $('#HospitalFinNumber').val(), encflag: '@encflag' }
                        };
                    }
                }

但我现在该怎么做?我知道我的其他功能不适用于不引人注目的ajax和验证?无论如何,我可以用这种方法调用我过去认识的这些函数吗? 的更新

我刚刚意识到你可以使用[Remote(MethodName,Controller,ErrorMessage)]来填充字段。但我只记得我有条件地调用这个远程方法。我使用相同的视图编辑或添加新行到数据库...如果我只是编辑行,我不检查该字段是否是唯一的。如果我要添加,请检查该字段是否唯一。我通过让控制器在视图上设置tempData变量来判断我是否正在添加或编辑...您可以在上面的示例中看到它...只有在设置了该变量时才需要该字段。我然后远程检查输入的值是否唯一...如何使用不显眼的ajax获得类似的功能?

ENDUPDATE 感谢。

2 个答案:

答案 0 :(得分:1)

您需要使用jQuery.validate.unobtrusive来挂钩您的标准验证规则,对于更复杂的自定义规则,您可以创建进行ajax调用的适配器或任何需要验证的适配器

答案 1 :(得分:0)

前提是您已经在您的应用程序中使用了所有正常的客户端验证。

1.在ViewModel中的PropertyName上添加Remote属性。

[Remote(“ActionName”,“ControllerName”)] public string PropertyName {get;组; }

2.在Controller中创建上面定义的操作。

public JsonResult ActionName(string PropertyName) {     返回Json(!PropertyName.Contains(“disallowedstring”,JsonRequestBehavior.AllowGet); }

有关更多详细信息,请查看:操作中的远程验证属性 - 此处的部分:http://www.codeproject.com/Articles/249452/ASP-NET-MVC3-Validation-Basic