MVC 5远程验证

use*_*430 23 validation data-annotations remote-validation asp.net-mvc-5

我需要在提交表单之前验证用户的输入字段值.

我在自定义控制器中创建了一个动作并用它装饰了该字段:

动作名称: CheckValue 控制器名称: Validate

[Remote("CheckValue", "Validate"), ErrorMessage="Value is not valid"]
public string Value { get; set; }
Run Code Online (Sandbox Code Playgroud)

问题是当我按提交时,表单正在提交,然后Value is not valid如果用户输入的值无效则显示消息.

如何验证用户输入的值并阻止在值无效时提交表单,并显示错误消息?

如果我尝试在JavaScript中检查表单是否有效$("#formId").valid()并返回true,则表示无论表的值是什么(有效与否),表单都有效.

另一方面,如果我用[Required]属性装饰另一个字段,则表单未提交,并且显示该字段所需的错误.但是,远程验证字段的场景后面不会进行验证.

adn*_*nan 36

MVC中远程验证的完整解决方案.它将检查数据库中是否存在电子邮件并显示以下错误:

电子邮件已经存在

  1. 账户控制者行动

    [AllowAnonymous]
    [HttpPost]
    public ActionResult CheckExistingEmail(string Email)
    {
        try
        {
            return Json(!IsEmailExists(Email));
        }
        catch (Exception ex)
        {
            return Json(false);
        }
    }
    
    private bool IsEmailExists(string email)
        =>  UserManager.FindByEmail(email) != null;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加模型验证

    [Required]
    [MaxLength(50)]
    [EmailAddress(ErrorMessage = "Invalid Email Address")]
    [System.Web.Mvc.Remote("CheckExistingEmail", "Account", HttpMethod = "POST", ErrorMessage = "Email already exists")]
    public string Email { get; set; }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加脚本

    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    
    Run Code Online (Sandbox Code Playgroud)


Ali*_*eño 3

您没有输入控制器代码。但必须是这样的:

你的代码:

[Remote("CheckValue", "Validate", ErrorMessage="Value is not valid")]
public string Value { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的控制器代码(验证):

public ActionResult CheckValue(string Value)
        {
            if (Value == "x value")
            {
        // This show the error message of validation and stop the submit of the form
                return Json(true, JsonRequestBehavior.AllowGet);
            }
            else
            {
        // This will ignore the validation and the submit of the form is gone to take place.
               return Json(false, JsonRequestBehavior.AllowGet);
            }
        }
Run Code Online (Sandbox Code Playgroud)