asp.net-mvc - MVC 应用程序中的后退按钮功能

标签 asp.net-mvc

我需要在我的 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/

相关文章:

asp.net-mvc - 如何从静态下拉列表中获取数据以在 mvc4 中建模

asp.net-mvc - 注册新帐户时,如何要求 ASP.NET 表单例份验证以发送验证电子邮件?

c# - .NET - Microsoft.Data.Entity 中是否有 DbSet Find 方法?

c# - 检查 HtmlString 在 C# 中是否为空格

asp.net-mvc - MVC捕获异常后在哪里可以找到错误信息

jquery - 如何防止双击 MVC Html.SubmitButton

asp.net-mvc - 如何在未经授权的情况下重定向到登录屏幕,同时在 MVC 中返回 401 状态代码?

c# - Azure 应用服务中的自定义日志记录配置

c# - 回发到 Controller 后 DropDownListFor 值为空

c# - 仅更新模型的一部分,验证问题?