2014-09-23 2 views
6

Я пытаюсь загрузить представление после вызова ajax. После вызова ajax мой метод действия вернет view, который будет загружен после успешного завершения вызова.Render a View после вызова AJAX в asp.net MVC

AJAX Я использую

функции PostMethods (URL, имя_файла, LNAME, электронная почта) {

var userRegisterViewModel = { 
    FirstName: fname, 
    LastName: lname, 
    Email: email 
}; 
$.ajax({ 
    type: 'Post', 
    dataType: "json", 
    url: url, 
    contentType: 'application/json', 
    data: JSON.stringify(userRegisterViewModel), 

// Успех и код ошибки

});} 

Мой аякс вызывает метод api, где я прохожу fname, lname и email. Теперь мой api-метод успешно сохраняет эти данные в базе данных, он вернет View, если не сможет сохранить данные, он вернет сообщение об ошибке, которое я могу показать пользователю в текущем виде. В HTML текущего представления есть пустой <spam>, чтобы отобразить сообщение об ошибке.

Мой метод Действие:

public ActionResult RegisterAndLogin(UserRegisterViewModel model) 
    { 
     ActionResult returnNextPage = null; 
     bool successToStoreData = SomeMethod(model); 
     if (successToStoreData) 
     { 
      returnNextPage = RedirectToAction(string.Empty, "Home"); 
     } 
     else 
     { 
      //Text message to show to the user 
     } 
     return returnNextPage; 
    } 

Какой код я должен написать, чтобы сделать это в AXAJ и метод действия

+1

AJAX звонки остаться на той же странице, так что 'RedirectToAction' не работает. Вы хотите отобразить представление на той же странице или вы хотите перенаправить на другую страницу, если ошибок нет? –

+0

@StephenMuecke Я хочу перенаправить на другую страницу. Но тогда и только тогда, когда данные успешно сохраняются. – Riki

+0

Тогда почему бы не использовать стандартную форму с submit, которая позволяет вам делать перенаправление? Если данные не сохранялись правильно, просто верните представление и покажите все ошибки проверки. –

ответ

8

AJAX звонки остаются на той же странице, так RedirectToAction не работает. Вы должны изменить свой контроллер для возвращения JSON, например

[HttpPost] 
public JsonResult RegisterAndLogin(UserRegisterViewModel model) 
{ 
    bool successToStoreData = SomeMethod(model); 
    if (successToStoreData) 
    { 
    return null; // indicates success 
    } 
    else 
    { 
    return Json("Your error message"); 
    } 
} 

и изменить функцию AJAX

$.ajax({ 
    type: 'Post', 
    dataType: "json", 
    url: url, 
    contentType: 'application/json', 
    data: JSON.stringify(userRegisterViewModel), 
    success: function(message) { 
    if (message) { 
     $('yourSpanSelector').text(message); // display the error message in the span tag 
    } else { 
     window.location.href='/YourController/YourAction' // redirect to another page 
    } 
    } 
}) 
Смежные вопросы