Как управлять ответами MVC AJAX в диалоговом окне jQuery - PullRequest
0 голосов
/ 13 марта 2011

Вот моя проблема:

В диалоге jQuery у меня есть следующий код:

<%:Ajax.ActionLink("Yes", "SendClaim", "Claim", new { id = Model.ExpenseId }, new AjaxOptions { UpdateTargetId = "dialog" }, new { @class = "button" })%>

Когда в контроллере происходит сбой, основанный на ролях, я возвращаю частичное представление, которое заменяет существующее диалоговое окно (см. UpdateTargetId = "dialog").

Когда все работает, я хочу сделать перенаправление на другую страницу (индекс всех утверждений), чтобы пользователь не выполнял дополнительные действия, но вся эта страница отображается в диалоге jQuery , поскольку она является ajax-запрос с идентификатором обновления.

Как правильно решить проблему?

Ответы [ 2 ]

1 голос
/ 13 марта 2011

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

Контроллер претензий:

[AcceptVerbs(HttpVerbs.Post)]
public Json Send(int expenseId)
{
// Check user stuff
if(valid)
// do stuff
    return new Json(true, JsonRequestBehavior.AllowGet);
else
    return new Json(false, JsonRequestBehavior.AllowGet);
}

jQuery

function submitClaim() {
    $.ajax({
                       url: "/Claim/Send",
                       type: "POST",
                       dataType: "json",
                       data: { 'expenseId': <%=Model.ExpenseId> },
                       success: function (data) {
                           if(data) { // if successful, redirect
                               document.location = "Claim/Index";
                           }
                           else { //load your partial view into your dialog
                               $("#idOfYourDialog").load('Claim/Error/');
                           }
                       },
                           error: function (xhr) { }
                       });
}

html

<a href="javascript:submitClaim()">Submit</a>
0 голосов
/ 13 марта 2011

Возвращает диалоговое окно «Все ОК» и имеет следующий JavaScript, когда пользователь нажимает кнопку «ОК»:

function redirect() {
   document.location = "<%:(String)ViewBag.Redirect %>";
}

$(document).ready(function() {
   $(".ui-dialog-titlebar-close").click(function() {
        redirect();
   });
});

Кажется неизбежным - вы не можете выполнить RedirectToAction, когда действие контроллера было вызвано из Ajax.ActionLink, так как ответ будет застрелен в updatetargetid.

...