asp.net MVC4中的条件验证

时间:2012-10-11 15:33:23

标签: jquery-validate asp.net-mvc-4

我希望能够根据调用视图的控制器启动一些验证功能......我将在ViewState中设置一个变量,这将有助于我知道调用该视图的控制器。

换句话说,如果设置了某个变量,我希望验证是必需的...当我将Jquery放入我的代码时,我在MVC2中的使用方式......

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

你看我在那里做什么。如果设置了某个变量,则只需要验证...在这种情况下,变量isFlagSet ...然后我将设置min Length并调用远程函数以确保该值是唯一的。

我不想在所有情况下都这样做。

到目前为止,我所读过的所有内容都没有明确的方法可以使用无效的ajax来实现这一目标?我错了,有没有办法可以做到这一点?如果没有,我怎样才能将常规的旧jquery验证放入我的代码中?

2 个答案:

答案 0 :(得分:11)

ASP.NET MVC 3使用jquery unobtrusive验证来执行客户端验证。因此,您可以编写custom RequiredIf验证属性,也可以使用Mvc Foolproof Validation中提供的属性,然后:

public class MyViewModel
{
    [RequiredIf("IsFlagSet", true)]
    [Remote("ValidateHosFin", "EditEncounter")]
    [MinLength(6)]
    public string HospitalFinNumber { get; set; }

    public bool IsFlagSet { get; set; }

    public string EncFlag { get; set; }
}

然后剩下的就是包含jquery.validate.jsjquery.validate.unobtrusive.js脚本,或者使用ASP.NET MVC 4中包含它们的相应包。

答案 1 :(得分:3)

Andy Westblog上建议的另一个解决方案是从控制器中的模型状态中有条理地删除字段

发布表单时,从模型状态中删除字段,以便它们不会被验证:

if (Request.IsAuthenticated)
{
    ModelState.Remove("CommenterName");
    ModelState.Remove("Email");
}

这对我有用。