ASP.Net С# 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 внутри класса. Есть идеи?


person Marco    schedule 10.02.2010    source источник


Ответы (4)


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);
person Rob    schedule 10.02.2010

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

person Paulus E Kurniawan    schedule 10.02.2010
comment
Это кажется лучшим решением, если вы спросите меня, поскольку вам не нужно изменять свой код, чтобы заставить его работать! - person Peter; 15.05.2012

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

using System.Web.UI;

И в коде:

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

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

С уважением

person Fawad Raza    schedule 12.02.2014

Я обнаружил, что 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();

}
person marc9889    schedule 15.09.2014