2012-04-15 1 views
1

Я полна мозгов в течение полутора дней, и я в тупике.Целевая страница Mvc3 не показана после сообщения Ajax

У меня есть сайт Mvc3, и я реализую мастер (многоступенчатая форма).

На первой странице отображается модель с контроллера, и она сериализована для Javascript.

Все идет хорошо методу пост ниже:

$('#nextButton').click(function (evt) { 
    // Validate the form, if validation passes, submit the form. 
    evt.preventDefault(); 
    var $form = $('form'); 
    if ($form.valid()) { 
     var viewModel = JSON.stringify(model); 
     $.post(
      "SampleSubmission/Home/Index", 
      { 'viewModel': viewModel } 
     ); 
    } 
}); 

Затем он попадает в действие контроллера ниже:

[HttpPost] 
    public ActionResult Index(string viewModel) 
    { 
     _viewModel = JsonConvert.DeserializeObject<SampleSubmissionViewModel>(viewModel); 

     // Save Model to Session. 
     Session[SessionViewModel] = _viewModel; 

     // If platform Id != null, workflow has already begun. 
     if (ModelState.IsValid) 
     { 
      return RedirectToAction("SystemDetail"); 
     } 
     return View(_viewModel); 
    } 

    [HttpGet] 
    public ActionResult SystemDetail() 
    { 
     // Page 2- System Details. 
     return View(_viewModel); 
    } 

Перенаправление работает, но не вторая страница не отображается.

Если я посмотрю в Fiddler, страница будет возвращена, как и должно быть.

Я храню модель в сессии, потому что это интранет-сайт, прежде чем кто говорит :-)

Любые идеи о том, как показать вторую страницу?

Приветствия,

Жюль комментарий

+0

Почему вы используете запрос ajax, если все, что вы хотите сделать, это отправить в действие и затем перенаправить? Если вы все еще хотите использовать ** Ajax/jQuery.post **, вам нужно сделать sth. с ответом, возвращенным из вашего действия, с помощью необязательного параметра 'callback' http://docs.jquery.com/Post. Btw. вы никогда не должны жестко указывать URL-адреса в asp.net mvc. – Andreas

+0

Привет, Андреас, Есть предложения по поводу того, как это сделать? - все еще учится –

+0

Я использую вариацию этого решения: http://stackoverflow.com/questions/6402628/multi-step-registration-process-issues-in-asp-net-mvc-splitted-viewmodels-sing?answertab= голосов # tab-top – Andreas

ответ

1

Чтобы объединить все примечания в один ответ.

При вызове ajax-действия для создания мастера критически важно обрабатывать ответ сервера и прикладывать его каким-либо образом к dom. Благодаря @pilavdzice опубликовано полное решение.

Однако этот способ создания мастера нельзя использовать без javascript и imho complexer для поддержки, проверка будет более сложной.

Из моего опыта решение, которое использует несколько видов и использует простые сообщения, как описано в сообщении от @Darin Dimitrov multi-step registration process или описано в книге Стивена Сандерсона MVC2, является более простым и более надежным решением.

0

Андреаса выше корректна.

Чтобы объяснить немного дальше, ваша страница не отображает ничего, потому что вам нужно OnSuccess обработчик принять результат возвращения из AJAX и отображать его на вашей странице, вы могли бы сделать что-то вроде этого:

$.post(
     "SampleSubmission/Home/Index", 
     { 'viewModel': viewModel }, 
     //onsuccess handler 
     function(data) { 
      $('#result').html(data); 
     }; 
    ); 

В вашей HTML-странице, если у вас есть:

<div id="result"></div>

Все, что вы передаете обратно будет помещены в этих дела.

Если у вас по-прежнему возникают проблемы, попробуйте объяснить, где вы застряли, и я буду помогать дальше.

+0

Спасибо, ребята, я решил реализовать решение Андреаса. Я не могу отметить его сообщения как ответ. Кто-нибудь знает, как я могу это сделать? Значок не отображается. –

+0

Что я не уверен. Вы всегда можете голосовать за меня;) – pilavdzice

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