我正在使用asp.net mvc。我有4个页面显示事件列表(不同类型的事件),每个页面上的“详细信息”链接指向“EventDescription.aspx”视图。
“EventDescription.aspx”有一个名为“返回事件”的链接,必须将用户带到相应的页面。
例如:如果“详细信息”请求来自page1,则“返回事件”链接需要指向page1.aspx。对于page2.aspx,page3.aspx,page4.aspx也是如此。
我的计划是在控制器操作“EventDescription”中捕获视图名称(page1.aspx)并在显示“EventDescription.aspx”之前存储在ViewData中,并为“返回事件”链接使用ViewData值。
如何从Action中获取请求的来源名称?
提前感谢。
答案 0 :(得分:2)
渲染页面时,还需要在单击 Back to Events 时呈现指向正确页面的链接。这最好在控制器方法中设置,您可以随时访问所有必要的信息。
一种简单的方法是将返回链接信息放在ViewData变量中(后跟未经测试的伪代码)。在您的控制器方法中:
ViewData["ReturnPath"] = "/Content/Page/1";
然后在你看来:
<% =Html.ActionLink("Back To Events", ViewData["ReturnPath"]) %>
或类似的东西。
或者,您可以尝试类似
的内容ViewContext.RouteData.Values["action"]
...如果你不介意那里的魔法弦。这将为您提供调用操作。
答案 1 :(得分:1)
如果您只想获取您来自的Url,可以在Action
中执行此操作ViewData["ReturnPath"] = this.Request.UrlReferrer.AbsolutePath;
这会为您提供您来自的网页的网址。如果您从Page1然后转到EventDescription。在EventDescription操作中,ReturnPath ViewData具有Page1的Url。或者反之亦然。
答案 2 :(得分:0)
将返回路径放在TempData(而不是ViewData)中,它可以从调用页面传递到Details页面。另请参阅http://jonkruger.com/blog/2009/04/06/aspnet-mvc-pass-parameters-when-redirecting-from-one-action-to-another/
答案 3 :(得分:0)
我建议您使用TempData而不是ViewData。例如,你可以有这样的设置。
public ActionResult Details(int id)
{
var event = repository.GetByID(id);
if (event != null)
{
TempData["ReturnPath"] = Request.UrlReferrer.ToString();
return View(event);
}
else { //....... ; }
}
在你的视图中你可以有一个像这样的常规ActionLink
<% =Html.ActionLink("Back To Events", TempData["ReturnPath"]) %>
如果您想要DRY,您还可以在控制器中创建一个Action方法,以便像这样处理重定向。
public ActionResult GoBack()
{
return Redirect(TempData["ReturnPath"]);
}
在你的视图中,正常的ActionLink就像这样
<% =Html.ActionLink("Back To Events", "GoBack") %>