什么是ASP.NET MVC中的Page.ResolveUrl?

Mar*_*man 72 asp.net-mvc

与Controller中可用的ASP.NET MVC中的Page.ResolveUrl相同的是什么?

Ata*_*hev 108

这是Url.Content:

ASPX:

<link rel="stylesheet" href="<%= Url.Content("~/Content/style.css") %>" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

剃刀:

<link rel="stylesheet" href="@Url.Content("~/Content/style.css")" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

  • 并且不要像我一样忽略"〜/",因为它很重要 (4认同)

小智 40

这应该做你想要的......

System.Web.VirtualPathUtility.ToAbsolute("~/")

  • 虽然我主要使用Url.Content,但这个方法很有用,因为它是静态的,不需要请求上下文,比如Url.Content. (2认同)

Kyl*_*Mit 6

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

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

一个典型的MVC页面让我们可以通过它访问其中的一些属性作为属性WebViewPage.有没有想过当你输入时@ViewData,你会神奇地连接到ViewData?那是因为你已经点击了你所在的MVC页面所暴露的属性.

因此,要调用这些方法,我们不一定要引用它们所代表的类型,而是引用它们的实例属性.

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

href="@Url.Content("~/index.html")" 
href="@Server.MapPath("~/index.html")" 
href="@Href("~/index.html")" 
Run Code Online (Sandbox Code Playgroud)

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

href="@VirtualPathUtility.ToAbsolute("~/index.html")"
Run Code Online (Sandbox Code Playgroud)

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" 
Run Code Online (Sandbox Code Playgroud)

总而言之,我建议使用@Url.Content它,因为它最适合MVC范例