Jquery 如何在不提交表单的情况下进行客户端远程验证?
实际上,我有一个使用viewmodel的MVC.Net表单,其中的字段具有Jquery 如何在不提交表单的情况下进行客户端远程验证?,jquery,asp.net-mvc,validation,Jquery,Asp.net Mvc,Validation,实际上,我有一个使用viewmodel的MVC.Net表单,其中的字段具有Required和Remote属性。客户端验证对于所需的部分非常有效。。。但这与我对遥控器的预期不同 问题是,在表单验证一次之前,我无法进行远程验证: Name字段由现有用户名填充-不会显示错误,因为没有对服务器进行调用 我验证了表单,进行了一个ajax调用以检查用户名的有效性,并显示了一条错误消息 现在,每次我在username字段中键入内容时,都会进行ajax调用,并相应地更新错误消息 模型如下: public c
Required
和Remote
属性。客户端验证对于所需的部分非常有效。。。但这与我对遥控器的预期不同
问题是,在表单验证一次之前,我无法进行远程
验证:
- Name字段由现有用户名填充-不会显示错误,因为没有对服务器进行调用
- 我验证了表单,进行了一个ajax调用以检查用户名的有效性,并显示了一条错误消息
- 现在,每次我在username字段中键入内容时,都会进行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>
}
另外,我不能删除Required
属性,因为javascript可以被禁用或调整,使用ModelState.IsValid
非常方便
有没有办法在第一次提交前调用远程规则?请确保您已在webconfig
文件中启用了这两个规则
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
如果需要,请使用JQuery验证函数。我将与您共享代码。@laxmanite“JQuery验证函数”是什么意思?在提交表单之前,请在任何事件上尝试这种类型的代码:function isvalid(){if($(“#DrpTest option:selected”).val()==”{return请选择Test。“+”\n;}否则{return“”}我看不出这对我的远程验证有什么帮助。当您键入文本时,远程验证正在工作,对吗?正如我所写的,“客户端验证对于所需的部分非常有效”。客户端验证工作得很好,我实际上想改变它的行为:)您已经将MinLength指定为3,一旦每个按键请求的name值达到MinLength,就会转到CheckUserName()方法。
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>