Что такое эквивалент страницы .ResolveUrl в ASP.NET MVC, доступный в контроллере?
Что эквивалентно странице .ResolveUrl в ASP.NET MVC?
Ответ 1
ASPX:
<link rel="stylesheet" href="<%= Url.Content("~/Content/style.css") %>" type="text/css" />
Бритва:
<link rel="stylesheet" href="@Url.Content("~/Content/style.css")" type="text/css" />
Ответ 2
Это должно делать то, что вы ищете...
System.Web.VirtualPathUtility.ToAbsolute("~/")
Ответ 3
Вот несколько способов решения пути, который использует этот оператор корневого приложения (~
)
-
UrlHelper.Content
-
HttpServerUtility.MapPath
-
WebPageExecutingBase.Href
-
VirtualPathUtility.ToAbsolute
-
Control.ResolveUrl
Чтобы вызвать любой метод с встроенным кодом на странице 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
Ответ 4
UrlHelper.Content()
выполняет то же самое, что и Control.ResolveUrl().
Для дальнейших ссылок: http://stephenwalther.com/archive/2009/02/18/asp-net-mvc-tip-47-ndash-using-resolveurl-in-an-html.aspx
Ответ 5
Вам больше не нужно делать это в Razor v2.0/ASP.NET MVC 4.
Просто используйте "~" на странице бритвы, и он разрешит это для вас.
<link rel="stylesheet" href="~/Content/style.css" type="text/css" />
Ответ 6
Server.MapPath() //returna full path
или
url.content()
Ответ 7
попробуйте использовать Server.MapPath().