Вызов метода MVC из диалога JQuery UI без AJAX - PullRequest
1 голос
/ 18 июля 2009

В настоящее время я использую диалоги пользовательского интерфейса JQuery на своем сайте. Однако недавно я начал использовать коллекцию MVC TempData для уведомлений об успехах / неудачах различных действий, вызванных моими диалогами. Ничего особенного или нового. Однако возникла проблема, с которой я не могу найти простое, очевидно, решение.

В некоторых моих диалогах мы перенаправляем на новую страницу при успешной отправке данных. Эти данные отправляются с использованием jQuery.Post, а затем мы делаем перенаправление при успешной отправке, используя window.location на странице. Однако это означает, что любые TempData, которые мы установили в методе контроллера, недоступны. Имеет смысл, так как для этого требуется тип возврата ActionResult.

Итак, мой вопрос был, используя JQuery UI Dialogs, что бы люди посоветовали в качестве способа передачи данных в контроллер БЕЗ использования jQuery POST или AJAX-вызовов. Очевидно, что я сам могу встроить форму в диалог и использовать ее, но кажется, что она наполовину лишена смысла использовать диалог JQuery UI, когда он обрабатывает все кнопки и т. Д., Для вас.

Возможно, мне не хватает чего-то действительно очевидного, но любая помощь будет принята с благодарностью. Большое спасибо.

Обновлено: вот весь метод действий. NB - это одна из реализаций, на самом деле я пробовал это несколькими способами. Но это текущая реализация. Когда вызывается действие и мы выполняем перенаправление на стороне клиента, заданные мною TempData получаются как NULL

[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
    public void RetireSelf(int playerKey)
    {
        PlayerDTO player = _playerTask.GetPlayer(playerKey);

        _log.Info("Player retiring themselves from ladder " + player.Name + player.PlayerKey);

        UserDTO user = _userTask.GetUser(CurrentUserName);

        if (user.UserKey != player.UserKey)
        {
            throw new LadderSecurityException(CurrentUserName + "trying to self retire another player");
        }

        _playerTask.RetirePlayer(playerKey);
        TempData["notification"] = "You were retired from the ladder.";
    }

1 Ответ

1 голос
/ 18 июля 2009

Вы можете вернуть JsonResult из действия RetireSelf:

if(Request.IsAjaxRequest())
{
    return Json(new { Notification = "You were retired from the ladder."});
}

На клиенте:

$.ajax({ url: ..., type: "POST", data: ..., dataType: "json",
    success: function(data) {
        var notification = data.Notification;
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...