Pregunta

Tengo el siguiente código:

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

Pero me gustaría tener:

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

Sin embargo, no soy capaz de utilizar ResolveClientUrl dentro de una clase. ¿Alguna idea?

¿Fue útil?

Solución

ResolveClientUrl es un miembro de la clase System.Web.UI.Control, por lo tanto es accesible directamente como:

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

cuando se le llama en el código de su página de asp.net.

Para usarlo dentro de una clase que va a tener que pasar la página (o un control de la página) en la clase en su constructor. Incluso entonces no estoy seguro de que sería capaz de utilizarlo en la forma en que has indicado. Probablemente tendría que hacer algo similar a:

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

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

Y a continuación, dentro de su página de asp.net hacer algo como:

var navPath = new NavigationPage(this);

Otros consejos

En lugar de llamar ResolveClientUrl en el objeto de página (o cualquier control), también se puede utilizar VirtualPathUtility.ToAbsolute("~/home.aspx"); que le dará el mismo resultado que llamar ResolveUrl("~/home.aspx");

poco viejo, pero podría ayudar a alguien. Usando:

using System.Web.UI;

Y en código:

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

Ha trabajado para mí, yo uso de aplicaciones Web y no solución de Sitio Web, sin embargo.

Regards

He encontrado VirtualPathUtility.ToAbsolute a funcionar muy bien para mi propósito.

Funcionaba perfectamente:

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

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top