繁体   English   中英

ASP.NET MVC模型验证始终失败

[英]ASP.NET MVC model validation always fails

我的控制器中有以下操作方法。 但是,似乎Model.IsValid()总是返回false,即使验证条件正常且未显示成功消息。 任何帮助,将不胜感激。

    [ActionName("CreateNewEmployeeForm")]
    [HttpPost]
    public ActionResult SaveEmployee(EmployeeViewModel employee, string btnSubmit)
    {
        switch (btnSubmit)
        {
            case "Save Employee":
                if (ModelState.IsValid)
                {
                    ViewBag.Message = "Thanks! We got your information.";
                    return View();
                }
                else
                {
                    return View();
                }
                break;
            case "Cancel":
                return RedirectToAction("EmployeeForm");
        }
        return new EmptyResult();
    }

以下是我对实体使用的验证:

    [Required(ErrorMessage ="Please Enter Your Name!")]
    [MaxLength(24)]
    [MinLength(8)]
    [RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "Kindly use letters only for name")]
    public string EmployeeName { get; set; }

    public string Designation { get; set; }

    [Required]
    [MaxLength(7)]
    [MinLength(4)]
    [RegularExpression("[^0-9]*$", ErrorMessage = "Salary must be numeric")]
    public decimal Salary { get; set; }

    [Required(ErrorMessage = "Please Enter Your Date Of Birth!")]
    [DataType(DataType.DateTime)]
    public DateTime DateOfBirth { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime DateCreated { get; set; }

您可以尝试哪个验证导致错误:

foreach (ModelState state in employee.ModelState.Values.Where(x => x.Errors.Count > 0))
{

}

检查您的ModelState以查看错误消息是什么,还有另一件事要提及,这不是一种编写一种操作方法来服务于两个执行两个不同操作的按钮的干净方法,您应该创建两个操作。

你有尝试过吗? 由于您的ModelState.IsValid仅检查他们是否输入了正确的内容,将其弄乱了,然后进行切换操作以确定他们按下了什么按钮。

[ActionName("CreateNewEmployeeForm")]
[HttpPost]
public ActionResult SaveEmployee(EmployeeViewModel employee, string btnSubmit)
{
    if (ModelState.IsValid)
    {
        switch (btnSubmit)
        {
            case "Save Employee":
                ViewBag.Message = "Thanks! We got your information.";
            ... where you want to send them after they submit their data
                break;
            case "Cancel":
            ... where you want to send them if they cancel (maybe back to the beginning)
                break;
        }
    }
    return View();
}

这样,您的开关逻辑就不会受到影响。 通过在if语句上打断以检查员工模型。

您还可以放置一个if状态,以尽早确定btnSubmit == Cancel并在该点将其重定向,而不必处理ModelState.IsValid或开关。

似乎您的正则表达式不正确,hat(^)应该在括号之外?

[RegularExpression("[^0-9]*$", ErrorMessage = "Salary must be numeric")]

希望能有所帮助。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM