Pergunta

Eu tenho o seguinte código:

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

Mas eu gostaria de ter:

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

No entanto, eu não sou capaz de usar ResolveClientUrl dentro de uma classe. Alguma idéia?

Foi útil?

Solução

ResolveClientUrl é um membro da classe System.Web.UI.Control, portanto, é acessível diretamente como:

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

quando chamado dentro do código de sua página asp.net.

Para usá-lo dentro de uma classe que você vai ter que passar a página (ou um controle na página) para a classe em seu construtor. Mesmo assim, eu não tenho certeza que você seria capaz de usá-lo da maneira que você indicou. Você provavelmente teria que fazer algo semelhante 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, em seguida, dentro de sua página asp.net fazer algo como:

var navPath = new NavigationPage(this);

Outras dicas

Em vez de chamar ResolveClientUrl sobre o objeto Page (ou quaisquer controles), você também pode usar VirtualPathUtility.ToAbsolute("~/home.aspx"); que lhe dará o mesmo resultado que chamar ResolveUrl("~/home.aspx");

pouco antiga, mas poderia ajudar alguém. Usando:

using System.Web.UI;

E em código:

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

funcionou para mim, eu uso o Web Application e não solução Web Site, no entanto.

Saudações

Eu encontrei VirtualPathUtility.ToAbsolute para o trabalho muito bem para o meu propósito.

Funcionou perfeitamente:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top