2010-02-10 9 views
18

Ich habe den folgenden Code:ASP.Net C# ResolveClientUrl innerhalb der Klasse

public class NavigationPath 
{ 
    private string menuItems = "<li>" + 
            "<a href=\"#\">home</a>" + 
           "</li>"; 

Aber ich haben möchte:

public class NavigationPath 
{ 
    private string menuItems = "<li>" + 
            "<a href=\"" + ResolveClientUrl("~/home.aspx") + "\">re</a>" + 
           "</li>"; 

Aber ich bin nicht in der Lage ResolveClientUrl innerhalb einer Klasse zu verwenden. Irgendwelche Ideen?

Antwort

7

ResolveClientUrl ist ein Mitglied der System.Web.UI.Control Klasse, es ist daher zugänglich direkt als:

var url = ResolveClientUrl("~/Some/Url/"); 

wenn im Code Ihrer asp.net-Seite bezeichnet.

Um es innerhalb einer Klasse zu verwenden, müssen Sie die Seite (oder ein Steuerelement auf der Seite) in die Klasse in ihrem Konstruktor übergeben. Selbst dann bin ich mir nicht sicher, ob Sie es so verwenden könnten, wie Sie es angegeben haben. Sie würden wahrscheinlich etwas Ähnliches zu tun haben:

public class NavigationPath 
{ 
    private string menuItems = string.Empty; 

    public NavigationPath(Page page) 
    { 
    menuItems = "<li>" + "<a href=\"" + page.ResolveClientUrl("~/Home.aspx") + "\">home</a>" + "</li>"; 
    } 
} 

Und dann in Ihrem asp.net Seite so etwas wie:

var navPath = new NavigationPage(this); 
+0

thx für deine Antwort. – Marco

49

Statt ResolveClientUrl auf das Page-Objekt (oder irgendwelchen Kontrollen) des Aufrufs können Sie auch VirtualPathUtility.ToAbsolute("~/home.aspx"); verwenden, die Ihnen das gleiche Ergebnis wie das Aufrufen geben wird ResolveUrl("~/home.aspx");

+0

Dies scheint die beste Lösung zu sein, wenn Sie mich fragen, da Sie Ihren Code nicht ändern müssen, damit er funktioniert! – Peter

0

Bit alt, aber könnte jemand helfen. Verwendung:

using System.Web.UI; 

Und in Code:

new Control().ResolveClientUrl("Path"); 

für mich gearbeitet, ich benutze Web Application und nicht die Web-Site-Lösung, though.

Grüße

0

Ich fand VirtualPathUtility.ToAbsolute sehr gut für meinen Zweck zu arbeiten.

Arbeitete perfekt:

protected void build_Menu() 
{ 

    StringBuilder sb = new StringBuilder(); 

    sb.Append("<li><a href='" + VirtualPathUtility.ToAbsolute("~/Default.aspx'>Home</a></li>")); 
    sb.Append("<li><a href='" + VirtualPathUtility.ToAbsolute("~/CARS/Default.aspx'>Cars</a></li>")); 
    sb.Append("<li><a href='" + VirtualPathUtility.ToAbsolute("~/AIRPLANES/Default.aspx'>Airplanes</a></li>")); 
    sb.Append("<li><a href='" + VirtualPathUtility.ToAbsolute("~/MOTORCYCLES/Default.aspx'>Motorcycles</a></li>")); 
    sb.Append("<li><a href='" + VirtualPathUtility.ToAbsolute("~/REPORTS/Default.aspx'>Reports</a></li>")); 
    sb.Append("<li><a href='" + VirtualPathUtility.ToAbsolute("~/MANUALS/Default.aspx'>Manuals</a> </li>")); 
    sb.Append("<li><a href='" + VirtualPathUtility.ToAbsolute("~/ADMINISTRATION/Default.aspx'>Administration</a></li>")); 


    MENUfromCodeBehind.Text = sb.ToString(); 

}