如何在不提交表单的情况下进行客户端远程验证?

时间:2017-05-31 09:56:07

标签: jquery asp.net-mvc validation

我实际上有一个MVC.Net表单,其中使用的viewmodel具有RequiredRemote属性的字段。客户端验证对于Required部分非常有用......但不像我期望的那样Remote

问题是,在表单验证一次之前,我无法进行Remote验证:

  • “名称”字段填充了现有用户名 - 未显示错误,因为没有对服务器进行调用
  • 我验证了表单,进行了ajax调用以检查用户名有效性,并显示错误消息
  • 现在,每当我在用户名字段中输入内容时,都会进行ajax调用并相应地更新错误消息

以下是模型:

public class TestModel
{
    [Required(ErrorMessage = "Name is Required")]
    [MinLength(3)]
    [Remote("CheckUserName", "CSValidationTest")]
    public string Name { get; set; }
}

观点:

@model TestModel
@{
    ViewBag.Title = "Index";
}

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Employee</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

@section scripts
{
    <script src="~/Scripts/jquery.validate.js" type="text/javascript"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
}

控制器:

public class CSValidationTestController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public JsonResult CheckUserName(string userName)
    {
        bool result = new Random().Next() > Int32.MaxValue / 2;

        if (result)
            return Json(true, JsonRequestBehavior.AllowGet);
        else
            return Json("Username already used, guid for call unicity : " + Guid.NewGuid().ToString(), JsonRequestBehavior.AllowGet);
    }
}

另外,我无法删除Required属性,因为可以禁用或调整javascript,并且使用ModelState.IsValid非常方便。

有没有办法在第一次提交之前调用远程规则?

1 个答案:

答案 0 :(得分:0)

确保您已在 webconfig 文件中启用了这两项。

<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings>