在Controller,ASP.NET MVC中获取视图名称

时间:2010-08-31 15:59:28

标签: asp.net-mvc

我正在使用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中获取请求的来源名称?

提前感谢。

4 个答案:

答案 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") %>