我有以下代码:

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

但是,我想有:

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

然而,我无法使用ResolveClientUrl一类的内部。任何想法?

有帮助吗?

解决方案

ResolveClientUrl是System.Web.UI.Control类的成员,因此它是可访问的直接作为:

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

当您的asp.net页面的代码中调用。

要使用它你将不得不页面(或者页面上的控件)传递到在其构造函数类的类中。即使是这样,我不知道你能在你指定的方式来使用它。你可能不得不做类似的东西:

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

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

然后你的asp.net页面里面做这样的事情:

var navPath = new NavigationPage(this);

其他提示

而不是页面对象(或任何对照),也可以使用ResolveClientUrl这将给你相同的结果调用VirtualPathUtility.ToAbsolute("~/home.aspx");上调用ResolveUrl("~/home.aspx");

有点老,但可能帮助别人。 使用:

using System.Web.UI;

和在代码:

new Control().ResolveClientUrl("Path");
为我工作

,我使用的Web应用程序,而不是网站解决方案,但。

此致

我发现的 VirtualPathUtility.ToAbsolute ,以很好地工作为我的目的。

完美地工作:

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

}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top