Was entspricht Page.ResolveUrl in ASP.NET MVC, das auf dem Controller verfügbar ist?
Was entspricht Page.ResolveUrl in ASP.NET MVC, das auf dem Controller verfügbar ist?
Antworten:
Es ist Url.Content :
ASPX:
<link rel="stylesheet" href="<%= Url.Content("~/Content/style.css") %>" type="text/css" />
Rasierer:
<link rel="stylesheet" href="@Url.Content("~/Content/style.css")" type="text/css" />
Dies sollte tun, was Sie suchen ...
System.Web.VirtualPathUtility.ToAbsolute ("~ /")
Hier finden Sie eine Reihe von Möglichkeiten zum Auflösen eines Pfads, der diesen Anwendungsstammoperator verwendet ( ~)
UrlHelper.ContentHttpServerUtility.MapPathWebPageExecutingBase.HrefVirtualPathUtility.ToAbsoluteControl.ResolveUrlUm eine Methode mit Inline-Code auf einer asp.net-Seite aufzurufen, muss die Methode entweder als Instanzvariable für das aktuelle Objekt verfügbar gemacht werden oder als statische / gemeinsam genutzte Methode verfügbar sein.
Über eine typische MVC-Seite können wir über das auf einige dieser Eigenschaften zugreifen WebViewPage. @ViewDataHaben Sie sich jemals gefragt , ob Sie beim Tippen auf magische Weise mit den ViewData verbunden werden? Dies liegt daran, dass Sie eine Eigenschaft getroffen haben, die von der MVC-Seite angezeigt wird, auf der Sie sich befinden.
Um diese Methoden aufzurufen, beziehen wir uns nicht unbedingt auf den Typ, den sie darstellen, sondern auf die Instanzeigenschaft, die sie verfügbar macht.
Wir können die obigen Instanzmethoden wie folgt aufrufen:
href="@Url.Content("~/index.html")"
href="@Server.MapPath("~/index.html")"
href="@Href("~/index.html")"
Wir können dies tun, um eine gemeinsam genutzte Methode aufzurufen, die keine Instanz benötigt:
href="@VirtualPathUtility.ToAbsolute("~/index.html")"
AFAIK, eine MVC-Seite erstellt nicht automatisch eine Instanz von irgendetwas aus dem System.Web.UI-Namespace, von dem ResolveUrlerbt. Wenn Sie aus irgendeinem Grund wirklich diese bestimmte Methode verwenden wollten, könnten Sie einfach ein Steuerelement neu erstellen und die darin enthaltenen Methoden verwenden, aber ich würde es wärmstens empfehlen .
@Code
Dim newControl As New System.Web.UI.Control
Dim resolvedUrl = newControl.ResolveUrl("~/index.html")
End Code
href="@resolvedUrl"
@Url.Contentes zu verwenden, da es am besten zu MVC-Paradigmen passtUrlHelper.Content() macht das gleiche wie Control.ResolveUrl().
Für weitere Referenzen: http://stephenwalther.com/archive/2009/02/18/asp-net-mvc-tip-47-ndash-using-resolveurl-in-an-html.aspx
In Razor v2.0 / ASP.NET MVC 4 müssen Sie dies nicht mehr tun.
Verwenden Sie einfach das "~" auf einer Rasierseite und es wird es für Sie lösen.
<link rel="stylesheet" href="~/Content/style.css" type="text/css" />
Server.MapPath() //returna full path
oder
url.content()
url.contentist aber stattdessen verfügbar!
Versuchen Sie es mit Server.MapPath ().