9

我希望能够根据调用视图的控制器启动一些验证功能...我将在 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 验证放入我的代码中?

4

2 回答 2

11

ASP.NET MVC 3 使用 jquery 不显眼的验证来执行客户端验证。因此,您可以编写自定义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.jsandjquery.validate.unobtrusive.js脚本或使用包含它们的 ASP.NET MVC 4 中的相应包。

于 2012-10-11T16:15:03.617 回答
3

Andy West在他的博客上建议的另一个解决方案是有条件地从 Controller 的模型状态中删除字段

发布表单后,从模型状态中删除字段,以免对其进行验证:

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

这对我有用。

于 2014-08-01T14:52:26.813 回答