【发布时间】:2009-07-18 10:59:08
【问题描述】:
我目前在我的网站上使用 JQuery UI 对话框。但是,我最近开始使用 MVC TempData 集合来通知我的对话框触发的各种操作的成功/失败。没有什么特别花哨或新的东西。但是,它提出了一个我找不到简单、明显的解决方案的问题。
在我的一些对话框中,我们会在成功提交数据后重定向到新页面。这些数据是使用 jQuery.Post 提交的,然后我们使用页面上的 window.location 进行成功提交的重定向。但是,这意味着我们在控制器方法中设置的任何 TempData 都不可用。有道理,因为它似乎需要 ActionResult 返回类型来处理这个。
所以,我的问题是,使用 JQuery UI 对话框,人们会建议作为一种在不使用 jQuery POST 或 AJAX 调用的情况下向控制器提交数据的方法。显然,我可以自己在对话框中嵌入一个表单并使用它,但是当它为您处理所有按钮等时,它似乎与使用 JQuery UI Dialog 的点相左。
也许我遗漏了一些非常明显的东西,但我们将不胜感激。非常感谢。
更新:这是整个 Action 方法。注意 - 这是一种实现,我实际上已经尝试了几种方法。但这是当前的实现。一旦调用了 Action,并且我们进行了客户端重定向,我设置的 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.";
}
【问题讨论】:
-
你航行:“但是,这意味着我们在控制器方法中设置的任何 TempData 都不可用。有道理,因为它似乎需要 ActionResult 返回类型来处理这个问题。”您能否发布代码您如何在 POST 操作中使用 TempData?
-
当然,这很简单。在 POST 动作中,我们有这行代码: TempData["notification"] = "Some notification goes here.";非常简单,但是在下一个请求中总是以 NULL 的形式出现。只有当我们通过非 AJAX 调用调用该方法时,它才会按预期出现。
-
我已更新帖子以包含代码示例和一些信息。
标签: jquery asp.net-mvc ajax model-view-controller