2012-02-23 26 views
14

Trong tài liệu của ASP.NET MVC nói rằng bạn nên làm một cái gì đó như thế này khi có một liên kết trong một cái nhìnƯu điểm của dao cạo thay thế (@href)

<a href="@href("~/SubPage")">Subpage</a>. 

Động cơ dao cạo thay thế @href("~/SubPage") để /Subpage.

là gì lợi thế là làm theo cách này thay vì

<a href="/SubPage">Subpage</a>. 

Trong những trường hợp như thế này và những người khác (như việc tạo ra một hình thức) tại sao sử dụng công cụ dao cạo thay vì ghi trực tiếp những gì bạn muốn. Tôi nghĩ là nhanh hơn ở phía máy chủ để in một cái gì đó trực tiếp cho phép động cơ tạo ra nó.

Trả lời

24

Nếu ứng dụng của bạn chạy trong một thư mục con, Razor @href sẽ tạo liên kết đúng như thế này:

www.myapp.com/subfolder/SubPage 

Nếu bạn viết nó bằng chính mình liên kết của bạn sẽ như thế này và sẽ không làm việc:

www.myapp.com/SubPage 

Thats vì ~ sẽ được thay thế bằng gốc ứng dụng của bạn bằng Razor.

+0

Và nếu tôi viết liên kết ngay với thư mục con hoặc ứng dụng không nằm trong thư mục con, có lợi thế nào không? –

+6

Không, tôi không nghĩ vậy. Nhưng bạn mất tính linh hoạt - bạn không bao giờ có thể thay đổi tên của thư mục con mà không cần tìm kiếm toàn bộ dự án của bạn nơi bạn đã viết tên đó xuống. Tôi rất coi trọng việc đó. – Marc

+1

+ 1- đá quý nhỏ này (@href) là SOO bị bỏ qua bởi nhiều nhà phát triển (khi không sử dụng @ Html.ActionLink()). sẽ cho bạn một phiếu bầu kép nếu tôi có thể :) –

0

tôi chỉ đơn giản viết

<a href="SubPage">Subpage</a>

tôi không thể nhận ra bất kỳ dự phòng tiêu cực

+1

Nếu bạn đã xác định các tuyến tùy chỉnh, điều này có khả năng sẽ phá vỡ các liên kết. Ví dụ, nếu tôi có một tuyến tùy chỉnh 'a/b/c' được ánh xạ tới hành động' SubPage' của 'PageController' và liên kết href của tôi là' OtherPage', trình duyệt sẽ điều hướng đến 'a/b/OtherPage' mặc dù , trong bối cảnh này, mục tiêu dự kiến ​​có thể là 'Trang/OtherPage'. Đây không chỉ là cách ứng dụng của bạn hiện đang được viết, mà là viết về mọi ứng dụng theo cách thích ứng và có thể làm giảm đi một cách duyên dáng. Điều này làm cho ứng dụng di động hơn một chút và cũng dễ dàng hỗ trợ các thay đổi trong tương lai. – defines

2

Phương pháp ActionLink không thể lấy HTML.

Bạn cần tạo thẻ <a> bình thường và sử dụng @Url.Action(...) cho số href.

<a href="@Url.Action("ActionName", "ControllerName")">Link Text</a>. 
Các vấn đề liên quan