Domanda

Ho il seguente codice:

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

Ma mi piacerebbe avere:

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

Comunque, io non sono in grado di utilizzare ResolveClientUrl all'interno di una classe. Tutte le idee?

È stato utile?

Soluzione

ResolveClientUrl è un membro della classe System.Web.UI.Control, quindi è accessibile direttamente come:

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

quando viene chiamato all'interno del codice della pagina asp.net.

Per utilizzarlo all'interno di una classe che si sta andando ad avere per passare il pagina (o un controllo sulla pagina) nella classe nel suo costruttore. Anche allora non sono sicuro che saresti in grado di utilizzare nel modo che hai indicato. Probabilmente avrebbe dovuto fare qualcosa di simile a:

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

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

E poi dentro la pagina asp.net fare qualcosa di simile:

var navPath = new NavigationPage(this);

Altri suggerimenti

Invece di chiamare ResolveClientUrl sull'oggetto pagina (o eventuali controlli), è anche possibile utilizzare VirtualPathUtility.ToAbsolute("~/home.aspx"); che vi darà lo stesso risultato di chiamare ResolveUrl("~/home.aspx");

po 'vecchio ma potrebbe aiutare qualcuno. Usando:

using System.Web.UI;

E in codice:

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

Ha lavorato per me, io uso applicazioni Web e non la soluzione del sito Web, però.

Saluti

Ho trovato VirtualPathUtility.ToAbsolute per funzionare molto bene per il mio scopo.

Ha funzionato perfettamente:

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

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top