2010-12-31 68 views
15

Tôi đang nhầm lẫn với đường dẫn tương đối ASP.NET, xin vui lòng ai đó có thể giúp đỡ?Đường dẫn tương đối ASP.NET

Trong một trang Thầy tôi đã đưa ra một nhãn link tham khảo:

<a href="~/Account/Login.aspx">Login</a> 

Từ các tài liệu chính thức ASP.NET Tôi đọc:

Ví dụ sau đây cho thấy ~ điều hành dùng để xác định một root- đường dẫn tương đối cho một hình ảnh khi sử dụng điều khiển máy chủ hình ảnh Trong ví dụ này, tệp hình ảnh được đọc từ thư mục Hình ảnh nằm ngay dưới gốc của ứng dụng Web, bất kể vị trí trang web.

<asp:image runat="server" id="Image1" ImageUrl="~/Images/SampleImage.jpg" />

Với sự đánh dấu đăng nhập, khi tôi nhấp vào liên kết từ một trang trong thư mục/tài khoản, tôi chuyển đến:

/Account/~/Account/Login.aspx 

Tại sao? Tại sao? H

Trả lời

27

Vì bạn đang sử dụng nó trực tiếp trong đánh dấu, thay vì trong điều khiển máy chủ. Một cái gì đó đơn giản như này nên sửa chữa nó:

<a runat="server" href="~/Account/Login.aspx">Login</a> 

Về cơ bản, con đường tham khảo ~ cần phải được dịch ra trên máy chủ, vì nó là một tham chiếu đến đường dẫn máy chủ của thư mục cơ sở của ứng dụng. Đánh dấu HTML đơn giản không được xử lý trên máy chủ, nó chỉ được gửi như là cho khách hàng. Chỉ mã được xử lý bởi máy chủ mới có thể dịch đường dẫn ~ đến những gì nó xử lý.

+7

Hoặc: ">Login sẽ cho bạn kết quả tương tự. –

+0

Yup, điều đó cũng sẽ làm được. Như sẽ sử dụng điều khiển ''. Có một số cách tiếp cận khác nhau, tùy thuộc vào những gì nhà phát triển muốn sử dụng. – David

+0

Cảm ơn David & Jamie. Chúc mừng năm mới cho cả hai. –

0

Bạn có thể sử dụng ~ khi tham chiếu đến URL bên trong Kiểm soát máy chủ ASP.NET. Bạn đang sử dụng thẻ này trong một thẻ <a> chỉ là html thuần túy mà không biết gì về ~. sử dụng ' "/Images/SampleImage.jpg"' thay

+1

Điều tôi không thích về việc sử dụng thư mục gốc "/" trong trang là nó có thể khác nhau tùy thuộc vào môi trường của bạn.Ví dụ: nếu ứng dụng của bạn nằm trong thư mục ảo trong XP trong môi trường dev của bạn và tại gốc web trên máy chủ sản xuất trong Server03 thì bạn sẽ nhận được các kết quả khác nhau. Tuy nhiên, –

+1

"/Images/SampleImage.jpg" không phải là đường dẫn tương đối. Cách tiếp cận này sẽ chỉ hoạt động nếu đường dẫn cơ sở của ứng dụng tương ứng với gốc máy chủ. Trong khi đó thường là trường hợp, nó không được bảo đảm, và trong thực tế không phải những gì đã được yêu cầu. – David

+0

Bạn nói đúng. Đó là câu trả lời dễ dàng của tôi mặc dù. Một người khác đã đăng ResolveClientUrl sẽ hoạt động tốt hơn. –

1

sử dụng lệnh này

<a href="<%=Page.ResolveUrl("~/product.aspx")%>" >Link To Products</a> 
Các vấn đề liên quan