【问题标题】:Obtain View name in Controller, ASP.NET MVC获取Controller中的视图名称,ASP.NET MVC
【发布时间】:2010-08-31 15:59:27
【问题描述】:

我正在使用 asp.net mvc。我有 4 个页面显示事件列表(不同类型的事件),每个页面上的“详细信息”链接指向“EventDescription.aspx”视图。

“EventDescription.aspx”有一个名为“Back to Events”的链接,它必须将用户带到相应的页面。

例如:如果“详细信息”请求来自 page1,则“返回事件”链接需要指向 page1.aspx。 page2.aspx、page3.aspx、page4.aspx 相同。

我的计划是在控制器操作“EventDescription”中捕获视图名称 (page1.aspx) 并在显示“EventDescription.aspx”之前存储在 ViewData 中,并使用“返回事件”链接的 ViewData 值。

如何从Action内部请求的来源获取View的名称?

提前致谢。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    当您渲染页面时,您还需要渲染一个链接,当点击Back to Events 时该链接将指向正确的页面。这最好在控制器方法中设置,您可以轻松访问所有必要的信息。

    一个简单的方法是把返回链接信息放在一个 ViewData 变量中
    (下面是未经测试的伪代码)。在您的控制器方法中:

    ViewData["ReturnPath"] = "/Content/Page/1";
    

    然后在你看来:

    <% =Html.ActionLink("Back To Events", ViewData["ReturnPath"]) %>
    

    或类似的东西。


    或者,您可以尝试类似的方法

    ViewContext.RouteData.Values["action"]
    

    ...如果您不介意那里的魔术字符串。这将为您提供调用操作。

    【讨论】:

    • 这样我就必须放入 4 个 Action 方法(对于 4 页)。我认为最好在接收请求的 Action 方法中的一个位置显示 eventDescription。我使用 生成链接,所以只需视图名称就足够了,因为我所有的操作方法名称都反映了视图名称。
    【解决方案2】:

    如果您只想获取您来自的 URL,您可以在您的操作中执行此操作

    ViewData["ReturnPath"] = this.Request.UrlReferrer.AbsolutePath;
    

    这将为您提供您来自的页面的 URL。如果您来自 Page1,那么您将转到 EventDescription。在您的 EventDescription 操作中,您的 ReturnPath ViewData 具有 Page1 的 Url。反之亦然。

    【讨论】:

      【解决方案3】:

      我建议您使用 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") %>
      

      【讨论】:

        【解决方案4】:

        将返回路径放在TempData(不是ViewData)中,它可以从调用页面传递到Details页面。另见http://jonkruger.com/blog/2009/04/06/aspnet-mvc-pass-parameters-when-redirecting-from-one-action-to-another/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-12
          • 1970-01-01
          • 2015-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-06
          相关资源
          最近更新 更多