【问题标题】:what is a good way of creating a back button to different 'coming from' pages什么是为不同的“来自”页面创建后退按钮的好方法
【发布时间】:2013-01-22 13:11:25
【问题描述】:

我有两个不同的页面,用户可以从中单击“详细信息”链接并转到详细信息页面。

在详细信息页面上,我有一个“返回”按钮,它将用户引导至原始页面,当然这是两个原始页面之一。

还有一个额外的问题:在其中一个返回链接中,我必须指定一个额外的匿名对象。

我现在的视图代码是:

@{
    MvcHtmlString backLink = null;
    if (Model.ReturnPage == MatchResultReturnPage.Search)
    {
        backLink = Html.ActionLink("GoBack", "Search", new {search = true});
    }
    else
    {
        backLink = Html.ActionLink("GoBack", "Dashboard");
    }
} 

在控制器中,我现在查看url.referrer,如果它包含“dashboard”,那么我将Model.ReturnPage 设置为“Dashboard”。

有没有更清洁的方法?

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    ReturnLink 作为模型的属性并将其设置在控制器中,这将减少您将该逻辑放入视图中的需要。

    【讨论】:

    • 我喜欢在控制器中创建反向链接的想法,但是如何从控制器访问Html (HtmlHelper)?
    • 在控制器中使用Url.Action("ActionName", "ControllerName", new { parameter = param }); 而不是HtmlHelper
    • 嗨,这给了我一个只有路径的字符串,对吗? Html.ActionLink 给了我一个完整的 A 链接。我尝试将Html.ActionLink 与来自控制器的路径一起使用,但我必须为Html.ActionLink 提供一个操作名。这是否意味着我必须自己创建 A 链接?
    • @Michel 没错,只需在您的视图中使用a 标签而不是Html.ActionLink 来自己创建它。烦人的是,ActionLink 没有过载,它需要一个完整的 URL。
    【解决方案2】:

    当然有更简洁的方法,但就您当前的代码而言,很容易理解您要做什么。

    我会说保持原样,只需在其周围放置一个#region 包装器,并在不需要使用它时将其隐藏:

    #region get referrer page
    MvcHtmlString backLink = null;
    if (Model.ReturnPage == MatchResultReturnPage.Search)
    {
        backLink = Html.ActionLink("GoBack", "Search", new {search = true});
    }
    else
    {
        backLink = Html.ActionLink("GoBack", "Dashboard");
    }
    #region
    

    我建议的唯一方法是在控制器中而不是视图中进行此检查,并将检查结果简单地放入模型属性或 ViewBag 中。

    要访问控制器中的 Helpers,请执行以下操作:

    var URL = new UrlHelper(this.Request.RequestContext).Action("MyAction", "MyController", new { id = 123 });
    

    【讨论】:

    • 我喜欢在控制器中创建反向链接的想法,但是如何从控制器访问Html (HtmlHelper)?
    • 像这样:var URL = new UrlHelper(this.Request.RequestContext).Action("MyAction", "MyController", new { id = 123 });
    【解决方案3】:

    您可能应该完全在 JavaScript 中实现后退按钮。
    使用history object

    <a href=”javascript:history.back()”> [Back]</a>
    

    【讨论】:

    • 除非页面在新标签/窗口中打开。
    • 如果以前不在页面中,它可能会错过new {search = true} 部分。
    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2018-10-25
    • 2019-01-18
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多