我需要在我的 MVC2 应用程序中实现后退按钮功能(在应用程序中使用显式后退按钮,而不是通过浏览器后退按钮)。
我已经浏览了这里的链接Back button functionality using ASP.net MVC建议使用Request.UrlReferrer。每当我有一个 HTTP Get(因为它带有查询字符串)时,它就可以很好地工作。但是当上一页是没有查询字符串的 HTTP POST 时,我会遇到问题。
有人研究过这样的解决方案吗?
我们最初的想法是生成并存储像 Stack 这样的链接,并在用户单击“后退”按钮时一一弹出网址。但是是否有更好的解决方案\设计模式可以帮助我实现这一目标?
最佳答案
您可以将 returnurl 存储到 actionresult 路由值,并为反向链接提供一个 html 帮助程序。
助手:
public static class HtmlHelpersExtensions
{
public static MvcHtmlString BackLink(this HtmlHelper helper,string defaultAction)
{
string returnUrl = HttpContext.Current.Request["returnUrl"];
// If there's return url param redirect to there
if (!String.IsNullOrEmpty(returnUrl))
{
return new MvcHtmlString("<a href=" + returnUrl + " >Back</a>");
}
// if user just posted and there's no returnurl, redirect us to default
else if (HttpContext.Current.Request.HttpMethod == "POST")
{
return helper.ActionLink("Back", defaultAction);
}
// we didn't post anything so we can safely go back to previous url
return new MvcHtmlString("<a href=" + HttpContext.Current.Request.UrlReferrer.ToString() + " >Back</a>");
}
}
Controller :
public ActionResult MyAction(string returnUrl)
{
return View(new MyModel());
}
[HttpPost]
public ActionResult MyAction(MyModel mm, string returnUrl)
{
if (ModelState.IsValid)
{
// No returnurl, redirect us to somewhere
if (string.IsNullOrEmpty(returnUrl))
return RedirectToAction("Index");
// redirect back
return Redirect(returnUrl);
}
return View(mm);
}
用法:
@Html.ActionLink("MyAction", "MyAction", new { returnUrl = Request.RawUrl.ToString() })
MyAction.cshtml 中的反向链接
@Html.BackLink("Index")
现在帮助程序决定是否使用 returnUrl 参数、默认操作或通过 urlreferrer 返回。
关于asp.net-mvc - MVC 应用程序中的后退按钮功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127255/