2010-02-10 36 views
18

Tôi có đoạn mã sau:ASP.Net C# ResolveClientUrl bên trong lớp

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

Nhưng tôi muốn có:

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

Tuy nhiên, tôi không thể sử dụng ResolveClientUrl bên trong một Class. Bất kỳ ý tưởng?

Trả lời

7

ResolveClientUrl là một thành viên của lớp System.Web.UI.Control, do đó nó có thể truy cập trực tiếp như:

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

khi gọi trong mã của trang asp.net bạn.

Để sử dụng nó trong lớp, bạn sẽ phải chuyển Trang (hoặc điều khiển trên trang) vào lớp trong hàm tạo của nó. Thậm chí sau đó tôi không chắc chắn bạn sẽ có thể sử dụng nó theo cách bạn đã chỉ ra. Có thể bạn sẽ phải làm điều gì đó tương tự như:

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

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

Và sau đó bên trong trang asp.net bạn làm điều gì đó như:

var navPath = new NavigationPage(this); 
+0

thx cho câu trả lời của bạn. – Marco

49

Thay vì gọi ResolveClientUrl trên trang đối tượng (hoặc bất kỳ điều khiển) , bạn cũng có thể sử dụng VirtualPathUtility.ToAbsolute("~/home.aspx"); sẽ cung cấp cho bạn kết quả tương tự như gọi số ResolveUrl("~/home.aspx");

+0

Điều này có vẻ là giải pháp tốt nhất nếu bạn hỏi tôi vì bạn không phải sửa đổi mã của mình để làm cho mã hoạt động! – Peter

0

Bit cũ nhưng có thể giúp ai đó. Sử dụng:

using System.Web.UI; 

Và trong mã:

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

Làm việc đối với tôi, tôi sử dụng giải pháp ứng dụng Web và không trang web, mặc dù.

Trân

0

tôi thấy VirtualPathUtility.ToAbsolute làm việc rất tốt cho mục đích của tôi.

Làm việc một cách hoàn hảo:

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

} 
Các vấn đề liên quan