2010-05-13 42 views
10

Tôi tự hỏi liệu có thể thêm điều kiện tham số vào cuộc gọi vào phương thức có điều kiện hay không.Điều kiện thêm htmlAttributes vào ASP.NET MVC Html.ActionLink

Ví dụ, tôi vẽ một loạt các liên kết (tổng cộng sáu) để điều hướng trong Site.Master tôi:

<%= Html.ActionLink("About", "About", "Pages") %> | 
<%= Html.ActionLink("Contact", "Contact", "Pages") %> 
<%-- etc, etc. --%> 

tôi muốn bao gồm một lớp CSS của "lựa chọn" cho liên kết nếu trên trang đó. Vì vậy, trong điều khiển của tôi, tôi đang trở về này:

ViewData.Add("CurrentPage", "About"); 
return View(); 

Và sau đó trong giao diện Tôi có một cuốn từ điển htmlAttributes:

<% Dictionary<string,object> htmlAttributes = new Dictionary<string,object>(); 
    htmlAttributes.Add("class","selected");%> 

Bây giờ câu hỏi duy nhất của tôi là làm thế nào để tôi bao gồm các htmlAttributes cho ActionLink thích . Tôi có thể thực hiện theo cách này cho mỗi liên kết:

<% htmlAttributes.Clear(); 
    if (ViewData["CurrentPage"] == "Contact") htmlAttributes.Add("class","selected");%> 
<%= Html.ActionLink("Contact", "Contact", "Pages", htmlAttributes) %> 

Nhưng điều đó có vẻ hơi lặp đi lặp lại. Có cách nào đó để làm điều gì đó giống như mã psuedo này không:

<%= Html.ActionLink("Contact", "Contact", "Pages", if(ViewData["CurrentPage"] == "Contact") { htmlAttributes }) %> 

Đó rõ ràng là cú pháp không hợp lệ, nhưng có cách nào đúng không? Tôi đang mở cho bất kỳ đề xuất hoàn toàn khác nhau để hiển thị các liên kết này. Tôi muốn ở lại với một cái gì đó như ActionLink tận dụng lợi thế của việc sử dụng các tuyến đường của tôi mặc dù thay vì cứng mã hóa thẻ.

Trả lời

15

Dưới đây là ba tùy chọn:

<%= Html.ActionLink("Contact", "Contact", "Pages", 
     new { @class = ViewData["CurrentPage"] == "Contact" ? "selected" : "" }) %> 

<%= Html.ActionLink("Contact", "Contact", "Pages", 
     ViewData["CurrentPage"] == "Contact" ? new { @class = "selected" } : null) %> 

<a href="<%=Url.Action("Contact", "Pages")%>" 
    class="<%=ViewData["CurrentPage"] == "Contact" ? "selected" : "" %>">Contact</a> 
+0

Perfect câu trả lời. Cảm ơn các tùy chọn! – macca1

+6

Tôi thấy rằng điều này không làm việc cho các thuộc tính bị vô hiệu hóa, vì trình duyệt vô hiệu hóa các phần tử html cho trường hợp của 'disabled =" "'. Viết phương pháp trợ giúp html của riêng bạn có vẻ là giải pháp duy nhất cho trường hợp đó. – arviman

+1

Kể từ MVC 4, bạn có thể đặt bất kỳ thuộc tính nào thành null và nó sẽ không hiển thị thuộc tính. –

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