c# asp.net class relative-path resolveclienturl

ASP.Net C#ResolveClientUrl dentro de la clase



class relative-path (4)

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 puedo usar ResolveClientUrl dentro de una clase. ¿Algunas ideas?


En lugar de llamar a ResolveClientUrl en el objeto Page (o cualquier control), también puede usar VirtualPathUtility.ToAbsolute("~/home.aspx"); que te dará el mismo resultado que llamar a ResolveUrl("~/home.aspx");


Encontré que VirtualPathUtility.ToAbsolute funciona muy bien para mi propósito.

Funcionó 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(); }


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

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

cuando se le llama dentro del código de su página asp.net.

Para usarlo dentro de una clase, tendrá que pasar la página (o un control en la página) a la clase en su constructor. Incluso entonces no estoy seguro de que puedas usarlo de la manera que me has indicado. Probablemente tendrías 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 luego dentro de tu página asp.net haz algo como:

var navPath = new NavigationPage(this);


Un poco viejo pero podría ayudar a alguien. Utilizando :

using System.Web.UI;

Y en código:

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

Sin embargo, funcionó para mí, uso una aplicación web y no una solución de sitio web.

Saludos