我有以下代码:
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>";
但是,我无法在Class中使用ResolveClientUrl。有什么想法吗?
答案 0 :(得分:49)
您可以使用ResolveClientUrl
而不是在Page对象(或任何控件)上调用VirtualPathUtility.ToAbsolute("~/home.aspx");
,这样可以获得与调用ResolveUrl("~/home.aspx");
相同的结果
答案 1 :(得分:8)
ResolveClientUrl是System.Web.UI.Control类的成员,因此可以直接访问:
var url = ResolveClientUrl("~/Some/Url/");
在asp.net页面的代码中调用。
要在类中使用它,您必须将Page(或页面上的控件)传递到其构造函数中的类中。即便如此,我也不确定你是否能按照你指示的方式使用它。你可能不得不做类似的事情:
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);
答案 2 :(得分:0)
using System.Web.UI;
在代码中:
new Control().ResolveClientUrl("Path");
为我工作,我使用Web应用程序而不是网站解决方案。
此致
答案 3 :(得分:0)
我发现 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();
}