2012-04-09 75 views
4

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

+1

你必须记住,一个视图与控制器操作不同。 MVC路由基于控制器和操作。操作可以将任何视图指定为输出。这意味着您不能总是依赖视图名称与Action相同。你能给我们一个你想用它做什么的例子吗? – 2012-04-09 13:42:03

+0

@Nick Bork其实我在这里问一个主要问题:http://stackoverflow.com/questions/10069687/use-htmlhelper-to-get-action-in-beginform-method-of-asp-net-mvc-3我在表单标签中需要action属性的值,我认为这个值与当前视图的Url相等。 – Saeid 2012-04-09 14:03:22

+0

视图没有URL,控制器动作。一个View只是一些HTML的一部分。您的操作在服务器上执行一些CRUD,然后决定返回哪个HTML块。如果不经过控制器操作(除了嵌套在视图中的PartialView),您绝不能访问视图。现在,大多数视图名称与Action名称匹配,但情况并非总是如此。我已经添加了一个使用Url助手的代码示例。 Url帮助程序允许您获取特定路线或控制器操作的URL。这应该有助于填充表单的操作标签。 – 2012-04-09 14:30:11

回答

5

如果你只是想要的网址,那么你可以通过Request.Url对象得到它。这将返回一个Uri,但是如果您想要原始URL,则返回Request.RawUrl

6

,如果你想获得的路由信息​​,像被称为

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

会是这样

@ViewContext.RouteData.Values["Controller"] 
控制器或动作方法

RouteData字典你可以得到所有关于控制器,动作和额外参数的名称所需的信息,这取决于你想要什么

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); 
} 
0

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

0

您可以使用HTML辅助传递对象页作为参考,就像这样:

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

一个在视图只需使用:

@Links.GoHome(this)