2011-11-03 8 views
12

Như câu hỏi đã nói, Có thể sử dụng ActionLink có chứa một phần tử hay không, và nếu không, cách tốt nhất để đạt được nó là gì?Có thể sử dụng ActionLink có chứa phần tử không?

Ví dụ, cho phép nói rằng tôi có một yếu tố Span, tôi muốn toàn bộ điều là một siêu liên kết ... Các công trình sau đây:

<a href="/Site/Page/@Model.ID?Type=test"> 
       <span class="box5">Click anywhere in this box</span> </a> 

Hãy tưởng tượng rằng span class/css box5 làm này lớn .. Ban đầu là một DIV, nhưng, tôi thấy rằng không tuân theo các tiêu chuẩn và điều này có vẻ như đã được thực hiện.

Điều này hiển thị và hoạt động tốt, nhưng, có cách nào để sử dụng ActionLink thay thế không? Tôi đã cố gắng đoán cú pháp như (sao chép từ các biểu mẫu):

@using (Html.Actionlink){<span class="box5">Click anywhere in this box</span>} 

và nhiều kết hợp khác không may mắn.

Bây giờ, giải pháp HTML thủ công của tôi hoạt động tốt và tôi vui mừng rời khỏi nó, nhưng, có thể sử dụng Hành động MVC hay không, và nếu có, tôi có nên lo lắng không?

Trả lời

28

Chỉ cần sử dụng @Url.Action thay vì:

<a href="@Url.Action("Page","Site", new { id = Model.Id, @Type = "test" })"> 
<span class="box5">Click anywhere in this box</span> </a> 
+0

nó hữu ích, thx – Pyrejkee

1

Bạn không thể chỉ định thẻ html bên trong liên kết hành động, nhưng tôi có thể đề xuất cho bạn hai giải pháp: 1 mở rộng liên kết hành động với chức năng của bạn. Vì vậy, bạn cũng có thể triển khai actionlink tạo href với thẻ htmal khác bên trong (img hoặc span như trong trường hợp của bạn)

2 bằng cách sử dụng url.content trong href. Nó giống như cách giải quyết thực tế của bạn nhưng tốt hơn vì bạn sử dụng các quy tắc bạn đã xác định trong global.asax thay vì sử dụng "chuỗi ma thuật"

5

Có một hack bạn có thể sử dụng để khắc phục hạn chế

@Html.Raw(
    Html 
     .ActionLink("-replace-me-", .....) 
     .ToString() 
     .Replace(
       "-replace-me-", 
       @"<span class=""box5"">Click anywhere in this box</span>")) 

nó không tao nhã, nhưng nó không được công việc

+1

sử dụng đề xuất của Michael Stum, nhưng hãy giữ bản hack này trong túi sau của bạn, có thể hữu ích khi sử dụng Ajax.ActionLink – Jason

+0

+1 chắc chắn - tôi đã không làm như vậy Tôi muốn chỉnh sửa/rephrase câu hỏi sau khi nhận được câu trả lời, nhưng, tôi đã quyết định rằng tôi muốn chúng được các liên kết Ajax và, có vẻ như giải pháp này hoạt động (sau khi bị mắc kẹt tất cả các buổi sáng) ... như vậy, + 1/câu trả lời với Michael, nhưng cũng +1 cho bạn. – Wil

+0

Tôi không chắc chắn nếu tôi làm sai, nhưng, nó chỉ ám chỉ như văn bản ... Tôi đoán dao cạo đang làm điều của nó đằng sau hậu trường. Theo đuổi tất cả trong '@ Html.Raw()' có vẻ như là lừa ... Lúc đầu điều này có vẻ khó hiểu, nhưng, nó thật tuyệt vời! – Wil

0

Just Viết <span> </span> một d ở giữa khoảng thời gian sử dụng phương pháp @html> ActionLink Nó sẽ hoạt động

+0

Tôi nghĩ rằng các poster ban đầu muốn có một cách để bao gồm chỉ là một phần của văn bản liên kết trong khoảng - nói cách khác, được lồng trong và không ngược lại. – bdesham