在ASP.NET MVC 3中使用HtmlHelper获取当前视图的URL

时间:2012-04-09 13:26:10

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

我问了一个类似的问题here我认为这是一个非常简单的问题(当然不适合我)。我有一个Html帮助器的扩展方法,我需要使用HtmlHelper获取当前视图的URL。有没有人对它有任何想法?

6 个答案:

答案 0 :(得分:9)

根据您的评论和您链接到的原始主题我认为您想使用Url帮助程序获取表单操作的URL,但我可能误解了您的需求:

在视图中:

 @Url.Action(null) returns the current controller/action
 @Url.Action("Action") returns a custom action with current controller
 @Url.Action("Action","Controller") returns a custom controller and action

在HTML帮助程序中:

 public static MvcHtmlString MySpecialHelper(this HtmlHelper htmlHelper)
 {
      UrlHelper urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext,htmlHelper.RouteCollection);
      string url = urlHelper.Action("Controller","Action");

      //To get the action based on the current Action/Controller use:
      url = urlHelper.Action(htmlHelper.ViewData["action"] as string);

      //or
      url = urlHelper.Action(null);

      return new MvcHtmlString(url);
 }

答案 1 :(得分:6)

如果要获取有关路径信息的信息,例如名为

的控制器或操作方法

您可以从RouteData对象

访问ViewContext字典

就像这样

@ViewContext.RouteData.Values["Controller"]

使用RouteData词典,您可以获得有关控制器,操作和额外参数名称的所有信息,具体取决于您的需求

答案 2 :(得分:5)

如果您只想要所请求的网址,则可以通过Request.Url对象获取该网址。这会返回一个Uri,但是如果你想要原始网址,那么Request.RawUrl

答案 3 :(得分:0)

您可以使用Request.RawUrl属性或Request.Url.ToString()或Request.Url.AbsoluteUri。

答案 4 :(得分:0)

您可以使用Html Helper传递对象页面作为参考,如下所示:

@helper GoHome(WebViewPage page)
{
   <a href="@page.Url.Action("Index", "Home")"></a>
}

在视图中使用:

@Links.GoHome(this)

答案 5 :(得分:0)

精益求精

public static MvcHtmlString MyHelper(this HtmlHelper htmlHelper)
{
    var url = htmlHelper.ViewContext.HttpContext.Request.Url;
    //more code
}

OP询问“ Html帮助程序的扩展方法”-是的,就是这样。