我问了一个类似的问题here我认为这是一个非常简单的问题(当然不适合我)。我有一个Html帮助器的扩展方法,我需要使用HtmlHelper获取当前视图的URL。有没有人对它有任何想法?
答案 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帮助程序的扩展方法”-是的,就是这样。