2009-06-04 61 views
14

Tôi đang tìm một cách để thay đổi lớp ActionLink trong bộ điều khiển dựa trên các tiêu chí cụ thể (không tìm thấy trong mô hình để tôi không thể viết có điều kiện trong chính chế độ xem). Nhưng tôi dường như không thể tìm thấy các ViewData ("tên") cho phép tôi làm việc w/yếu tố này (tôi cho rằng điều này là có thể, nhưng tôi đang thiếu một cái gì đó).Làm thế nào để tự động thay đổi lớp của một Html.ActionLink trong MVC

Tôi có một helper html như vậy theo quan điểm của tôi

<%=Html.ActionLink("View", "Index", "Home")%> 

Nhưng trong điều khiển của tôi Tôi không chắc chắn làm thế nào để tham khảo này, giống như dưới đây để thêm một thuộc tính như lớp hoặc onclick.

ViewData("View").attributes.add("class", "active") 

Trả lời

29

Bạn không đặt thuộc tính CSS từ trình điều khiển vì đó là mối quan tâm của chế độ xem. Bạn có thể thêm HTML thuộc tính đến ActionLink như thế này:

<%=Html.ActionLink("View Cases", "Index", "Home", new { @class="active" })%> 

Hoặc bạn có thể xây dựng neo của bạn "bằng tay":

<a href="<%=Url.Action("Index", "Home")%>" class="active">View Cases</a> 

Hoặc nếu bạn cần phải có điều kiện thiết lập các lớp đang hoạt động:

<% var activeClass = someCondition ? "active" : ""; %> 
<a href="<%=Url.Action("Index", "Home")%>" class="<%=activeClass%>">View Cases</a> 
+0

đồng ý, nhưng trong trường hợp tôi cần hiển thị/ẩn tùy chọn menu dựa trên thông tin xác thực người dùng (biểu mẫu web chuyển đổi thành MVC) - làm cách nào tôi có thể thực hiện như vậy trong MVC? –

+1

Đã chỉnh sửa với nhiều ví dụ hơn. –

+3

Để hiển thị/ẩn dựa trên thông tin xác thực, hãy bao quanh bằng khối nếu viết hoặc viết phương thức mở rộng HtmlHelper để đóng gói logic. Bạn có thể chuyển một giá trị từ bộ điều khiển nếu người dùng được xác thực rồi kiểm tra điều đó trong khung nhìn. –

2

Trong chế độ xem Razor bạn có thể làm điều gì đó như sau:

@model AssessmentQuestionViewModel 

@{var newClass = Model.AnswerValue == 0 ? "not-answered" : string.Empty;} 

<a href="@Url.Action("Index", "Home")" class="wizard-step @newClass">View Question</a> 
Các vấn đề liên quan