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