2014-11-02 4 views
2

Я разрабатываю веб-сайт с asp.net mvc 4,Ошибка возврата Ajax в Asp. Net MVC

У меня есть метод, который проверяет, зарегистрирован ли пользователь или нет. Я использую ajax для него, если пользователь уже зарегистрирован, я хотел бы написать сообщение на странице регистрации на странице регистрации, если нет, я бы хотел зарегистрировать пользователя и вернуться на домашнюю страницу. Надеюсь, это ясно. потому что это кажется немного трудным для понимания.

script type="text/javascript"> 
$(function() { 
    $('#form0').submit(function(event) { 

     event.preventDefault(); 
     var result = ""; 
     var form = $(this); 


     $.ajax({ 
      url: "CheckUser", //form.attr("action"), 
      data: form.serialize(), 
      beforeSend: function() { 
       $("#ajax-loader").show(); 
      }, 
      complete: function() { 
       $("#ajax-loader").hide(); 
      }, 
      error: function(request, status, error) { 
       var obj = jQuery.parseJSON(request.responseText); 
       if (request.status == 403) // authorize error 
       { 
        myRouting(obj.LogOnUrl, "403 error", "error"); 

       } else { 

        alert("Error Occured: " + error.responseText + "\nError Code: " + 
    request.responseText + " -- " + request.responseText); 
        var msg = "Error: " + error + "\nErrorCode: " + request.status; 
        myRouting("", msg, "error"); 

       } 
      }, 

      success: function (data) { 

       $.each(data, function() { 
        result += this.Name + "\n"; 
       }); 


       myRouting("", data, "data"); 

      } 
     }); 

     return false; 
    }); 



$(function myRouting(site, message, type) { 


    if (type == "error") { 
     $('#searchFailed').remove(); 
     $('<div id="searchFailed"></div>').appendTo('#searchMain'); 
     $('#searchFailed').append("<p>" + message + "</p>"); 
    } 
    }); 


}); 
</script> 

@using (Html.BeginForm("CheckUser", "Account", FormMethod.Post, new { id = "form0" })) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary() 

    <fieldset> 
     <legend>Registration Form</legend> 
     <ol> 
      <li> 
       @Html.LabelFor(m => m.UserName) 
       @Html.TextBoxFor(m => m.UserName) 
      </li>     



      <li> 
       @Html.LabelFor(m => m.Name) 
       @Html.TextBoxFor(m => m.Name) 
      </li>      


      <li> 
       @Html.LabelFor(m =>m.Password) 
       @Html.PasswordFor(m => m.Password) 
      </li> 

      <li> 
       @Html.Label("Confirm Password") 
       @Html.PasswordFor(m => m.Password) 
      </li> 

      <li> 
       @Html.LabelFor(m => m.Email) 
       @Html.TextBoxFor(m => m.Email) 
      </li>        


     </ol> 
     <input type="submit" value="Register" /> 
    </fieldset> 
} 

А вот мой AccountController

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(User model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      try 
      { 

       var result = helper.RegisterUser(model); 

       if (result) 
       return RedirectToAction("Index", "Home"); //Json(Url.Action("Index", "Home")); 

      } 
      catch (MembershipCreateUserException e) 
      { 
       ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
      } 
     } 

     return View(model); 
    } 

    public ActionResult CheckUser(User model) 
    { 
     bool result = helper.IsUserExist(model); 

      if (result) 
      { 
      ModelState.AddModelError("", ErrorCodeToString(MembershipCreateStatus.DuplicateUserName)); 

      return Content("User is already created !!!!"); 

      } 
      return Register(model); 
    } 

Я знаю, что в AJAX, его не возможно переориентировать действия, но если я мог бы сделать это «ошибка» в AJAX, я могу перенаправить его в AJAX ..

возвращение содержание всегда является «успех» в AJAX, даже пользователь не зарегистрирован раньше, Лисы быть «успех»

ответ

2

не путайте success остроумием событий h успех логической части/авторизации вашего кода.

Успех в ajax означает, что запрос прошел. Вам нужно будет проверить возвращаемые данные, чтобы узнать, есть ли у вас информация для определения того, удалось ли ему проверить пользователя или нет.

Внутри обработчика событий success проверьте возвращаемые данные.

Если бы я был вами, я бы не вернулся. Я бы, вероятно, вернул JSON, который, несомненно, имел бы информацию об успехе или неудаче задачи .. и, возможно, описание ошибки.

+0

Благодарим вас за ответ, вы имеете в виду, как это http://stackoverflow.com/questions/19722873/ajax-call-always-return-success – unbalanced

+0

@ не сбалансированный да, в значительной степени идея. – scartag

+0

ОК спасибо вам еще раз :) – unbalanced

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