保存查询字符串Bewteen Actions

时间:2017-05-05 17:47:51

标签: c# asp.net-mvc razor

我有一个可以过滤的索引操作,使用查询字符串完成。当我选择一条记录时,我会转到详细信息操作。从那里我可以导航到与此记录相关的其他操作,然后将引导回到详细信息操作。我希望能够从索引页面保存URL,这将使查询字符串参数保持不变。显然,我无法使用直接的Request.UrlReferrer执行此操作,因为如果之前的操作不是索引,它就不会是正确的。我想出了一个解决方案,但我想知道是否有更好的方法。谢谢!

public ActionResult Details(int? id)
{
    var url = Request.UrlReferrer;

    // Save URL if coming from the Employees/Index page
    if (url != null && url.AbsolutePath == "/Employees")
        Session.Add("OfficeURL", url.ToString());

    // Model Stuff

    return View();
}

详细信息视图

@Html.ActionLink("Back to List", "Index", null, new { @href = Session["OfficeURL"] })

1 个答案:

答案 0 :(得分:1)

您需要传递一个“返回网址”,其中包含指向其他视图的链接。基本上:

<强> Index.cshtml

@Html.ActionLink("View Details", "Details", "Foo", new { returnUrl = Request.RawUrl })

这会将当前索引URL放在链接的查询字符串中。然后,在您的其他操作中,您将接受此作为参数并将其存储在ViewBag中:

public ActionResult Details(int? id, string returnUrl = null)
{
    ...

    ViewBag.ReturnUrl = returnUrl;
    return View();
}

然后,在这些其他视图中,您将以与上述相同的方式使用此ViewBag成员:

<强> Details.cshtml

@Html.ActionLink("Click Me!", "Foo", "Foo", new { returnUrl = ViewBag.ReturnUrl })

当您准备好返回索引时,您将链接/重定向到您传递的返回网址。