【问题标题】:How to execute remote validation when button is clicked?单击按钮时如何执行远程验证?
【发布时间】:2014-02-08 08:42:49
【问题描述】:

我正在使用带有数据注释的远程验证来检查用户输入的用户名是否已存在于数据库中。我的代码如下所示:

[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 调用来检查用户名。但是,我只想在用户单击按钮时进行检查。这可能吗?

【问题讨论】:

    标签: jquery asp.net-mvc data-annotations


    【解决方案1】:

    我认为这很难,因为不显眼的验证使用jquery验证插件,它有一个远程方法http://jqueryvalidation.org/remote-method,并且它没有设置字段验证事件的参数,我建议你使用一些技巧:

    将提交按钮设置为普通按钮:

    <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/

    【讨论】:

    • 谢谢。我真的给了我一个前进的方向。太糟糕了,远程属性没有提供某种可以使用的客户端事件处理。
    【解决方案2】:

    我只想在用户单击按钮时进行检查。 这可能吗?

    是的,这是可能的。您需要为特定视图禁用客户端验证 -

    @{
        HtmlHelper.ClientValidationEnabled = false;
    }
    

    如果你想全局禁用验证,那么你可以在 web.config 中禁用它 -

    <configuration>
        <appSettings>
            <add key="ClientValidationEnabled" value="false"/>
            <add key="UnobtrusiveJavaScriptEnabled" value="false"/>
        </appSettings>
    </configuration>
    

    还有一点很重要 - 不幸的是,远程验证不支持服务器端验证。要获得服务器端验证,您可以使用此Nuget from Tugberk Ugurlu 并执行远程服务器端验证。

    【讨论】:

      猜你喜欢
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 2018-11-30
      • 2014-04-20
      • 2015-10-09
      • 1970-01-01
      • 2015-06-26
      相关资源
      最近更新 更多