Вот целый ряд способов определить путь, который использует этот оператор корневого приложения (~
)
Чтобы вызвать любой метод со встроенным кодом на странице 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