Что эквивалентно Page.ResolveUrl в ASP.NET MVC? - PullRequest
70 голосов
/ 16 марта 2010

Что эквивалентно Page.ResolveUrl в ASP.NET MVC, доступной в контроллере?

Ответы [ 7 ]

105 голосов
/ 16 марта 2010

Это Url.Content :

ASPX:

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

Razor:

<link rel="stylesheet" href="@Url.Content("~/Content/style.css")" type="text/css" />
39 голосов
/ 16 марта 2010

Это должно сделать то, что вы ищете ...

System.Web.VirtualPathUtility.ToAbsolute("~/")
6 голосов
/ 01 декабря 2014

Вот целый ряд способов определить путь, который использует этот оператор корневого приложения (~)

Чтобы вызвать любой метод со встроенным кодом на странице 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

3 голосов
/ 17 августа 2012

UrlHelper.Content() делает то же самое, что и Control.ResolveUrl().

Для дальнейших ссылок: http://stephenwalther.com/archive/2009/02/18/asp-net-mvc-tip-47-ndash-using-resolveurl-in-an-html.aspx

0 голосов
/ 03 ноября 2016

Вам больше не нужно делать это в Razor v2.0 / ASP.NET MVC 4.

Просто используйте "~" на странице бритвы, и она разрешит ее для вас.

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

Источник

0 голосов
/ 16 марта 2010

попробуйте использовать Server.MapPath ().

0 голосов
/ 16 марта 2010
Server.MapPath() //returna full path

или

url.content()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...