【发布时间】:2009-08-18 14:35:44
【问题描述】:
如果您不想要任何上下文或我为什么需要此示例的示例,请跳至底部的 问题!
为了保持整洁,我最初构建我的应用程序时没有使用 JavaScript。我现在正尝试在其顶部添加一层不显眼的 JavaScript。
本着 MVC 的精神,我利用了RedirectToAction() 之类的简单路由和重新路由。
假设我有以下 URL 来启动注册过程:
假设注册过程有两个步骤:
http://www.mysite.com/signup/1
http://www.mysite.com/signup/2
假设我希望,如果启用了 JavaScript,则注册表单会出现在诸如厚框之类的对话框中。
如果用户在第 2 步离开注册过程,但后来点击了“注册”按钮,我想要这个 URL:
执行一些业务逻辑,检查会话。如果他们在中途放弃了之前的注册工作,那么我想提示他们恢复或重新开始。
我最终可能会采用以下方法:
public ActionResult SignUp(int? step)
{
if(!step.HasValue)
{
if((bool)Session["SignUpInProgress"] == true)
{
return RedirectToAction("WouldYouLikeToResume");
}
else
{
step = 1;
}
}
...
}
public ActionResult WouldYouLikeToResume()
{
if(Request.IsAjaxRequest())
{
return View("WouldYouLikeToResumeControl");
}
return View();
}
WouldYouLikeToResume中的逻辑是:
- 如果是 AJAX 请求,只返回用户控件,或者“部分”,这样模态弹出框不包含母版页。
- 否则返回正常视图
但是,这会失败,因为一旦我重定向出 SignUp,IsAjaxRequest() 就会变为 false。
显然有一些非常简单的方法可以修复这个特定的重定向,但我想在全球范围内保持对 Ajax 请求的了解,以便在我的网站上解决这个问题。
问题:
ASP.NET MVC 非常非常可扩展。
是否可以拦截对RedirectToAction 的调用并在参数中注入类似“isAjaxRequest”的内容?
或
是否有其他方法可以安全地检测到发起呼叫是 AJAX 呼叫?
或
我是不是走错了路?
【问题讨论】:
-
这似乎在 MVC 中已经修复很久了。在 v5 中,一切都按预期工作,唯一的问题是您可能需要将
[OutputCache(Duration = 0)]添加到相关方法中,否则浏览器可能会重用以前的“完整”内容而不是发出 ajax 请求。
标签: asp.net-mvc ajax url-routing