在MVC中生成完整的URL?

9

可能是重复问题:
如何在ASP.NET MVC中找到操作的绝对URL?
Asp MVC操作链接绝对URL

您好,

有没有一种简单的方法来生成特定操作的完整URL?我已经尝试过这个:

urlHelper.Action("Action", "Controller")

但这会生成一个反斜杠“\”。

最好的问候

编辑 1:我已经尝试过这个:

urlHelper.Action("List", "Ad", null, "http"); 

但是它只返回:localhost:16055。我期望的是像 localhost:16055/Ad/List 这样的东西?

这是在视图上下文中,还是在控制器代码中? - Tejs
只需在主机/协议信息前添加即可? - Andrew Barber
2个回答

20

使用 Html.ActionLink("链接标题", "动作", "控制器")

生成完整的链接,请使用:

@Html.ActionLink("Link Title", "Action", "Controller", "http", "www.mysampledomain.com", 
                 "_blank", new {id = paramValue}, new { @class="someClass" })

这是一个带有所有可指定参数的扩展重载。请查看此MSDN文章:http://msdn.microsoft.com/en-us/library/dd492938.aspx

要从控制器生成,请使用此代码:

var url = UrlHelper.GenerateUrl(null, "MyAction", "MyController", "http", "www.mydomain.com", String.Empty, null, RouteTable.Routes, this.ControllerContext.RequestContext, false);

url变量将包含您的URL的字符串表示形式。 您可以将其存储在ViewBag中,例如:

ViewBag.MyUrl = UrlHelper.GenerateUrl(null, "MyAction", "MyController", "http", "www.mydomain.com", String.Empty, null, RouteTable.Routes,
                                        this.ControllerContext.RequestContext, false);

从 View 中调用它:

@ViewBag.MyUrl

应该就是这样了。


我该如何从控制器操作中实现这个? - Banshee
2
Html.ActionLink 生成链接。如果你想要完整的URL,使用Url助手,Url.Action。该方法的其中一个重载允许你指定模式,这样做将生成一个完全限定的URL,例如:http://localhost:1234/controller/action。 - Nick Bork
不一定。Html.ActionLink有一个重载,也可以创建完整的链接。 - Huske
@Huske,SnowJim问:“我该如何从控制器操作中执行此操作”,我的回答是为什么要获取Html.ActionLink的原始HTML?如果您在控制器中,则很可能希望使用Url.Action获取URL的字符串值,而不是完整链接的HTML字符串。现在,如果您在视图中,则有时需要同时使用Html.ActionLink获取原始HTML和Url.Action生成URL的情况。 - Nick Bork
在你的答案下面,SnowJim评论道:“我如何从控制器操作中实现这个?” - Nick Bork
显示剩余4条评论

0

我尝试过这个:urlHelper.Action("List", "Ad", null, "http"),但它只返回:http://localhost:16055/。我期望得到的是类似于http://localhost:16055/Ad/List的东西? - Banshee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接