2014-02-08 5 views
1

Я использую удаленную проверку с аннотациями данных, чтобы проверить, что имя пользователя, введенное пользователем, уже существует в базе данных. Мой код выглядит следующим образом:Как выполнить удаленное подтверждение при нажатии кнопки?

[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 вызов выполняется для проверки имени пользователя. Тем не менее, я бы хотел сделать только чек, когда пользователь нажимает кнопку. Это возможно?

ответ

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; } 
    ..... 
} 

В будущем, если есть некоторые трудные validtaion я рекомендую использовать непосредственно http://jqueryvalidation.org/

+0

Спасибо за это. Я действительно даю мне направление. Слишком плохо, что атрибут Remote не предоставляет какую-либо обработку событий на стороне клиента, которая может быть использована. – FrankO

-1

Хотелось бы только проверить, когда пользователь нажимает кнопку. Возможно ли это?

Да, это возможно. Вам нужно отключить проверку на стороне клиента для конкретной точки зрения -

@{ 
    HtmlHelper.ClientValidationEnabled = false; 
} 

Если вы хотите, чтобы глобально отключить проверку, то вы можете отключить его в web.config -

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

И еще один важный момент здесь - К сожалению, Remote Validation не поддерживает проверку на стороне сервера. Чтобы получить подтверждение на стороне сервера, вы можете использовать этот Nuget from Tugberk Ugurlu и выполнить проверку на стороне удаленного сервера.

Смежные вопросы