2010-02-10 3 views
18

У меня есть следующий код:ASP.Net C# ResolveClientUrl внутри класса

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

Но я хотел бы иметь:

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

Однако, я не могу использовать ResolveClientUrl внутри класса. Есть идеи?

ответ

7

ResolveClientUrl является членом класса System.Web.UI.Control, следовательно, он доступен непосредственно как:

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

при вызове в коде вашей страницы asp.net.

Чтобы использовать его внутри класса, вам придется передать страницу (или элемент управления на странице) в класс в своем конструкторе. Даже тогда я не уверен, что вы сможете использовать его так, как вы указали. Вы, вероятно, придется сделать что-то похожее на:

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

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

А потом внутри страницы asp.net сделать что-то вроде:

var navPath = new NavigationPage(this); 
+0

ТНХ для ответа. – Marco

49

Вместо вызова ResolveClientUrl на объекте Page (или какого-либо контроля) , вы также можете использовать VirtualPathUtility.ToAbsolute("~/home.aspx");, который даст вам тот же результат, что и звонок ResolveUrl("~/home.aspx");

+0

Это похоже на лучшее решение, если вы спросите меня, как вам не нужно изменять свой код, чтобы заставить его работать! – Peter

0

Бит старый, но может помочь кому-то. Использование:

using System.Web.UI; 

И в коде:

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

работал для меня, я использую решение веб-приложений, а не веб-сайта, хотя.

С уважением

0

Я нашел VirtualPathUtility.ToAbsolute работать очень хорошо для моей цели.

работал отлично:

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(); 

}