Was entspricht Page.ResolveUrl in ASP.NET MVC, das auf dem Controller verfügbar ist?
asp.net-mvc
Mark Redman
quelle
quelle
Dies sollte tun, was Sie suchen ...
quelle
Hier finden Sie eine Reihe von Möglichkeiten zum Auflösen eines Pfads, der diesen Anwendungsstammoperator verwendet (
~
)UrlHelper.Content
HttpServerUtility.MapPath
WebPageExecutingBase.Href
VirtualPathUtility.ToAbsolute
Control.ResolveUrl
Um 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
.@ViewData
Haben 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
ResolveUrl
erbt. 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"
Trotzdem würde ich empfehlen,
@Url.Content
es zu verwenden, da es am besten zu MVC-Paradigmen passtquelle
UrlHelper.Content()
macht das gleiche wieControl.ResolveUrl().
Für weitere Referenzen: http://stephenwalther.com/archive/2009/02/18/asp-net-mvc-tip-47-ndash-using-resolveurl-in-an-html.aspx
quelle
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" />
Quelle
quelle
Server.MapPath() //returna full path
oder
url.content()
quelle
url.content
ist aber stattdessen verfügbar!Versuchen Sie es mit Server.MapPath ().
quelle