2010-11-15 2 views
0

У меня проблема с Ajax.BeginForm. У меня есть форма с submit и кнопка, которая обновляет частичное представление.Возврат перенаправления или PartialView из того же действия

Что я пытаюсь сделать, так это то, что я мог использовать следующие операторы return в одном и том же действии.

// button activates this 
return PartialView("PartialViewName", data); 

и

// submit activates this 
return Redirect(model.Url); 

Теперь проблема заключается в том, что Redirect вызывает проблемы с Ajax.BeginForm

<% using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { OnSuccess = "OnSuccess", UpdateTargetId = "Container", InsertionMode = InsertionMode.Replace }, new { id = "eventAjaxForm" })) { %> 

Как я могу определить, является результатом PartialView или мы перенаправляет пользователя?

ответ

2

Обычно, когда вы выполняете вызов AJAX для действия контроллера, любые переадресации выполняются до тех пор, пока клиент не получит 200 код состояния или ошибку. Таким образом, HTML URL-адреса, который вы перенаправляете, будет помещен в div Container. С другой стороны, в действии вашего контроллера вы можете проверить, был ли вызов асинхронным, используя Request.IsAjaxRequest() и вернуть частичный.

1

Если вы используете шаблон Post Redirect Get, вам необходимо использовать Request.IsAjaxRequest() в сочетании с TempData, то есть вы сохраняете результат Request.IsAjaxRequest() в TempData, таким образом, когда вы получаете перенаправленный запрос, вы можете проверить TempData, чтобы узнать, является ли это результатом исходного запроса Ajax.

Это хорошо объясняется в Steven Sandersons книге на Pro ASP.NET MVC 2.

0

Спасибо ребята за ваши ответы, но я был в состоянии решить эту проблему с другими решениями.

Я сделал отдельное действие для отправки и частичного просмотра. Обновление частичного обзора выполняется с помощью следующего метода jQuery.

$('.class').click(function() { 
    var form = $("#eventForm").serialize(); 
    $.post("/Controller/Action", 
    { 
     form 
    }, 
    function (result) { 
     $('#container').html(result); 
    } 
    ); 
}); 

и отправить осуществляется с помощью «обычной» кнопки отправки.

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