什么与ASP.NET MVC中的Page.ResolveUrl等效?


Answers:



42

这应该做您想要的...

System.Web.VirtualPathUtility.ToAbsolute(“〜/”)

2
尽管我主要使用Url.Content,但此方法非常有用,因为它是静态的并且不需要请求上下文,例如Url.Content。
R. Schreurs

可以在Web表单和MVC都使用的.ascx上使用它。
kevinpo '17

8

以下是一堆解析使用该应用程序根运算符(的路径的方法~

若要在asp.net页上使用内联代码调用任何方法,则该方法需要作为当前对象上的实例变量公开,或作为静态/共享方法提供。

一个典型的MVC页面使我们可以通过 WebViewPage。曾经想知道您何时键入@ViewData,就可以神奇地连接到ViewData?那是因为您已经找到了您所在的MVC页面公开的属性。

因此,调用这些方法时,我们不一定要引用它们表示的类型,而是要公开它们的实例属性。

我们可以分别这样调用上述实例方法:

href="@Url.Content("~/index.html")" 
href="@Server.MapPath("~/index.html")" 
href="@Href("~/index.html")" 

我们可以这样做来调用不需要实例的共享方法:

href="@VirtualPathUtility.ToAbsolute("~/index.html")"

AFAIK,一个MVC页面不会自动从System.Web.UI命名空间创建任何实例的实例,而该实例是从该实例ResolveUrl继承而来的。如果出于某种原因,您确实想使用该特定方法,则可以新建一个控件并使用它公开的方法,但是我强烈建议您反对

@Code
    Dim newControl As New System.Web.UI.Control
    Dim resolvedUrl = newControl.ResolveUrl("~/index.html")
End Code
href="@resolvedUrl" 

综上所述,我建议您使用@Url.Content最适合MVC范例的方法



0

在Razor v2.0 / ASP.NET MVC 4中,您不再需要这样做。

只需在剃须刀页面中使用“〜”,它将为您解决。

<link rel="stylesheet" href="~/Content/style.css" type="text/css" />

资源


-4
Server.MapPath() //returna full path

要么

url.content()

Server.MapPath()是否返回物理磁盘路径,而不是扩展完整的URL,如Page.ResolveUrl(“〜”)?
马克·雷德曼

1
是的,它的确可以使用,您可以修改它,但url.content可以使用它!
Paul Creasey

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.