多个字段的MVC 3远程验证

时间:2013-07-17 09:10:17

标签: c# asp.net-mvc asp.net-mvc-3 validation remote-validation

我想验证三个字段中至少有一个不为空。我试图使用ASP.NET远程验证机制来做到这一点。

我有以下型号:

public class MyModel
    {
        public MyModel()
        {
            EmployeeIds = new List<int>();
            ManagerIds= new List<int>();
        }

        [Remote("AtLeastOneSelected", "Company", AdditionalFields = "EmployeeIds, ManagerIds")]
        public int? SuperManagerId { get; set; }

        public IEnumerable<int> EmployeeIds { get; set; }

        public IEnumerable<int> ManagerIds{ get; set; }

    }

控制器:

public ActionResult AtLeastOneSelected(int supermanagerid, IEnumerable<int> employeeids, IEnumerable<int> managerids)
        {
            var isSuperManagerSelected = Request.Params["SuperManagerId"] != "null";
            var isEmployeeSelected = Request.Params["EmployeeIds"] != "null";
            var isManagerSelected = Request.Params["ManagerIds"] != "null";
            return Json(isSuperManagerSelected || isEmployeeSelected || isManagerSelected, JsonRequestBehavior.AllowGet);
        }

使用multiselect在视图上实现EmployeeIds和ManagerIds。 我第一次修改SuperManagerId时验证了一次。当我尝试再次修改它甚至提交我的表单时,远程验证不起作用。

我试图强制对视图进行验证:

$('body').on('click', '#create-company', function () {
    $("form").validate().form();
    if ($("form").valid()) {
        alert('valid');
        $("form").submit();
    } else {
        alert('error');
    }
});

但它没有帮助。

1 个答案:

答案 0 :(得分:2)

我发现了问题。 缓存了第一次验证的结果。属性[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]有所帮助。