我正在使用带数据注释的远程验证来检查用户输入的用户名是否已存在于数据库中。我的代码如下所示:
[Required]
[Display(Name = "User name")]
[System.Web.Mvc.Remote("DoesUserNameExist", "Validation", ErrorMessage = "User name already exists, please select a different user name.")]
public override string UserName { get; set; }
默认情况下,当您标记或保留此字段的HTML版本焦点时,会进行ajax调用以检查用户名。但是,我想只在用户点击按钮时进行检查。这可能吗?
答案 0 :(得分:1)
我觉得这很难,因为不显眼的验证使用jquery验证插件,它有一个远程方法http://jqueryvalidation.org/remote-method,并且它没有设置字段验证事件的参数,我建议你使用一些技巧:< / p>
将提交按钮设置为普通按钮:
<input type="button" id="your-submit-button" value="send" />
或
<button type="button" id="your-submit-button">
</button>
$("#your-submit-button").click(function(event)
{
event.preventDefault();
if($("#form").valid())
{
$.ajax(
//set option to ajax request validation
success:function(valid){
if(valid){
//if ok send data
$('#form).submit();
}
}
)
}
return false;
})
我也有旧的服务器端代码,也许它也可以帮助你:
public class AjaxValidatorController : Controller
{
//
// GET: /AjaxValidator/
public JsonResult ValidateEmail(string email)
{
//
var ValidatorEmail = new UserExistAttribute();
bool ResultEmail = ValidatorEmail.IsValid(email);
return Json(ResultEmail, JsonRequestBehavior.AllowGet);
}
}
public class IsUserExistAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
if (Membership.FindUsersByEmail(Convert.ToString(value)).Count == 0)
{
return false;
}
return true;
}
}
public class RecoveryModel
{
[IsUserExist(ErrorMessage="some message" )]
...
public string Email { get; set; }
.....
}
在将来如果有一些困难的验证,我建议直接使用http://jqueryvalidation.org/
答案 1 :(得分:-1)
我想只在用户点击按钮时进行检查。 这可能吗?
是的,这是可能的。您需要为特定视图禁用客户端验证 -
@{
HtmlHelper.ClientValidationEnabled = false;
}
如果要全局禁用验证,则可以在web.config -
中禁用它<configuration>
<appSettings>
<add key="ClientValidationEnabled" value="false"/>
<add key="UnobtrusiveJavaScriptEnabled" value="false"/>
</appSettings>
</configuration>
这里还有一点重要 - 遗憾的是,远程验证不支持服务器端验证。要获得服务器端验证,您可以使用此Nuget from Tugberk Ugurlu并执行远程服务器端验证。