Возврат Redirect или PartialView из того же действия - PullRequest
0 голосов
/ 15 ноября 2010

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

Я пытаюсь добиться того, чтобы я мог использовать следующие операторы 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 или мы перенаправляем пользователя?

Ответы [ 3 ]

2 голосов
/ 15 ноября 2010

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

1 голос
/ 16 ноября 2010

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

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

0 голосов
/ 16 ноября 2010

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

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

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

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

...