Làm cách nào tôi có thể thêm thuộc tính lớp vào thành phần HTML được tạo bởi Trình trợ giúp HTML của MVC?


188

ASP.NET MVC có thể tạo ra các phần tử HTML sử dụng HTML Helpers, ví dụ @Html.ActionLink(), @Html.BeginForm()và vân vân.

Tôi biết tôi có thể chỉ định các thuộc tính biểu mẫu bằng cách tạo một đối tượng ẩn danh và truyền đối tượng đó cho tham số (thứ tư trong trường hợp này) htmlAttributestrong đó chỉ định một idcho phần tử:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { id = "MyForm"})

Nhưng những gì về classthuộc tính? Rõ ràng điều này không hoạt động:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { class = "myclass"})

Vì điều đó chỉ ném các lỗi cú pháp ngẫu nhiên khi chế độ xem của tôi được yêu cầu, bởi vì nó mong đợi một cái gì đó khác sau khi gặp từ khóa C # class.

Tôi cũng đã thử:

new { _class = "myclass"}

new { class_ = "myclass"}

Nhưng chúng cũng không hoạt động, vì dấu gạch dưới được thay thế bằng dấu gạch ngang .

Tôi biết rằng tôi cũng có thể viết các phần tử HTML bằng tay hoặc bọc biểu mẫu bên trong a <div class="myClass">, nhưng tôi vẫn muốn biết làm thế nào để thực hiện nó.

Câu trả lời:


348

Để tạo một loại ẩn danh (hoặc bất kỳ loại nào) với một thuộc tính có từ khóa dành riêng như tên của nó trong C #, bạn có thể thêm tên thuộc tính bằng dấu @:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { @class = "myclass"})

Đối với VB.NET , cú pháp này sẽ được thực hiện bằng dấu chấm, .trong ngôn ngữ đó là cú pháp mặc định cho tất cả các loại ẩn danh :

Html.BeginForm("Foo", "Bar", FormMethod.Post, new with { .class = "myclass" })

Trình phân tích cú pháp không đủ thông minh, IMO, nếu nó cần gợi ý đó với bối cảnh tại thời điểm đó trong mã.
chập chững

3

Thực tiễn tốt nhất hiện nay trong phát triển CSS là tạo ra các bộ chọn tổng quát hơn với các sửa đổi có thể được áp dụng rộng rãi nhất có thể trên toàn bộ trang web. Tôi sẽ cố gắng tránh xác định các kiểu riêng biệt cho các thành phần trang riêng lẻ.

Nếu mục đích của lớp CSS trên <form/>phần tử là để kiểm soát kiểu của các phần tử trong biểu mẫu, bạn có thể thêm thuộc tính lớp <fieldset/>mà phần tử hiện có đóng gói bất kỳ biểu mẫu nào theo mặc định trong các trang web được tạo bởi ASP.NET MVC. Một lớp CSS trên biểu mẫu hiếm khi cần thiết.


4
Bạn chắc chắn đúng, tuy nhiên trường hợp này là khác nhau. Tôi đang tìm cách để chỉ định siêu dữ liệu cho một vài plugin jquery. Điều này thường được thực hiện bằng cách sử dụng sai thuộc tính lớp.
Adrian Grigore

13
Bạn có thể đề xuất các thực tiễn tốt nhất, nhưng nếu tôi có một mẫu sử dụng css trên một biểu mẫu, tôi sẽ không đi bán mẫu để làm cho nó "chính xác". Thực tế là, một khách hàng sẽ không trả nhiều tiền hơn vì bạn đã làm đúng bằng cách ...
Christian Payne

1
@ChristianPayne Họ có thể bị buộc phải trả nhiều tiền hơn trong tương lai vì bạn đã không làm vậy.
Ian Warburton

1
Tôi đã bỏ phiếu phản hồi này vì nó không trả lời câu hỏi. Một câu trả lời thích hợp hơn sẽ trả lời câu hỏi trước sau đó đưa ra hướng dẫn thực hành tốt nhất.
Ben
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.