Asp.net mvc 获取当前视图';在ASP.NET MVC 3中使用HtmlHelper创建Url

Asp.net mvc 获取当前视图';在ASP.NET MVC 3中使用HtmlHelper创建Url,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,我问了一个类似的问题,我认为这是一个非常简单的问题(当然对我来说不是)。我有一个Html助手的扩展方法,我需要用HtmlHelper获取当前视图的url。有人知道吗?如果您只需要请求的url,那么您可以通过Request.url对象获取它。这将返回一个Uri,但是如果您想要原始url,那么如果您想要获取有关路由信息的信息,例如调用的控制器或操作方法,则可以请求.RawUrl 您可以从ViewContext对象访问RouteData字典 会是这样的 @ViewContext.RouteData.V

我问了一个类似的问题,我认为这是一个非常简单的问题(当然对我来说不是)。我有一个Html助手的扩展方法,我需要用HtmlHelper获取当前视图的url。有人知道吗?

如果您只需要请求的url,那么您可以通过
Request.url
对象获取它。这将返回一个Uri,但是如果您想要原始url,那么如果您想要获取有关路由信息的信息,例如调用的控制器或操作方法,则可以请求.RawUrl

您可以从
ViewContext
对象访问
RouteData
字典

会是这样的

@ViewContext.RouteData.Values["Controller"]

使用
RouteData
字典,您可以获得有关控制器、操作和额外参数名称所需的所有信息,具体取决于您需要的内容基于您的评论和链接到的原始线程,我想您需要使用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);
 }

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

您可以使用Html帮助程序作为引用传递对象页面,如下所示:

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

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

OP询问了“Html助手的扩展方法”-是的,就是这样。

您必须记住,视图与控制器操作不是一回事。MVC路由基于控制器和操作。操作可以将任何视图指定为输出。这意味着您不能总是依赖于视图名称与操作相同。你能给我们举个例子说明你想用它做什么吗?@Nick Bork实际上我在这里问了一个主要问题:我需要form tag中action属性的一个值,我认为这个值等于当前视图的Url。视图没有Url,控制器操作有Url。视图只是HTML的一部分。您的操作在服务器上执行一些CRUD,然后决定返回哪个HTML块。如果不执行控制器操作,则永远无法访问视图(视图中嵌套的PartialView除外)。现在,大多数视图名称与操作名称匹配,但情况并非总是如此。我添加了一个使用Url帮助器的代码示例。Url帮助器允许您获取特定路由或控制器操作的Url。这将有助于填充表单的action标记。我同意@NickBork。视图没有URL,因为它们不是可通过internet访问的资源。您可能需要的是原始请求的URL。您应该能够通过多种方法通过HttpRequestBase对象进行提取。
public static MvcHtmlString MyHelper(this HtmlHelper htmlHelper)
{
    var url = htmlHelper.ViewContext.HttpContext.Request.Url;
    //more code
}