2011-06-22 49 views
40

Cách chuyển đối tượng sang thuộc tính HTML? Ví dụ tôi có đoạn mã sau:Chuyển đối tượng sang thuộc tính HTML

var attrs = new { id = "myid", style = "color: Red;" }; 

Làm thế nào để chuyển đổi attrs chuỗi như thế này để nhúng chúng vào một đoạn mã HTML:

id="myid" style="color: Red;" 

Cảm ơn trước :)

+0

Cảm ơn bạn đã đặt câu hỏi về bạn! Tôi đã cứu ngày của tôi! – Sergey

Trả lời

68

Chức năng này, đáng ngạc nhiên đủ, được cung cấp bởi lớp RouteValueDictionary:

IDictionary<string, object> htmlAttributes = new RouteValueDictionary(attrs); 

Sau đó bạn có thể sử dụng từ điển này kết hợp với số TagBuilder, có thể bạn sẽ vẫn sử dụng:

var tagBuilder = new TagBuilder("input"); 
tagBuilder.MergeAttributes(htmlAttributes); 
tagBuilder.ToString(TagRenderMode.Normal); 

Bạn có thể thấy điều này được thực hiện trong chính mã nguồn ASP.NET MVC; một trong những ví dụ đơn giản hơn là ở TextAreaExtensions.cs.

EDIT:

Để chuyển đổi đúng "data_attr" thành "dữ liệu attr", sử dụng AnonymousObjectToHtmlAttributes phương pháp tĩnh.

IDictionary<string, object> htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(attrs); 
+2

Chỉ cần thử điều này với thuộc tính data_bind và đầu ra là data_bind như trái với dự kiến, dữ liệu ràng buộc - bất kỳ ý tưởng nào? – SimonGates

+0

Thật không may Url TextAreaExtensions không còn hợp lệ :) Chỉ cần cho bạn biết. – slawek

+0

@slawek cảm ơn, cố định với điều gần nhất tôi có thể tìm thấy. – Domenic

21

Bạn làm không cần phải chuyển đổi thành chuỗi. Các paramater cuối cùng cho HTML Helpers là một đối tượng. Bạn chỉ cần cung cấp cho nó đối tượng như bạn đã viết ở trên:

Đối exmample

@Html.TextBoxFor(x => x.Foo, new { size = 10, maxlength = 10 }) 
@Html.TextAreaFor(x => x.Notes, new { @class = "additionalInfo" }) 
@Html.TextBoxFor(x=>x.Registration.Address.Postcode, new {type="number", @class="postcode numeric", size=5, maxlength=5}) 

trên một mặt lưu ý bạn có lẽ không nên được đặt kiểu directy inline với HTML của bạn và sử dụng một lớp CSS/selector thay với một phong cách riêng biệt tờ. Cũng ID của mỗi phần tử DOM tự động nên được thiết lập khi bạn sử dụng những người giúp đỡ MVC HTML

+1

Tôi biết, nhưng ngoài ra, tôi muốn viết phương pháp của riêng tôi để tạo thành phần biểu mẫu khác, vì vậy tôi cần một cách để làm như MVC 3 đã làm :) –

+0

np bạn có lẽ nên đề cập rằng trong câu hỏi của bạn – Daveo

+0

Cảm ơn, tôi hãy nhớ rằng :) –

5

Dưới đây là cách thực hiện chuyển đổi này:

var htmlAttributes = new { id="myid", @class="myclass" }; 

string string_htmlAttributes = ""; 
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(htmlAttributes)) 
{ 
    string_htmlAttributes += string.Format("{0}=\"{1}\" ", property.Name.Replace('_', '-'), property.GetValue(htmlAttributes)); 
} 

PropertyDescriptor thuộc về lớp System.ComponentModel

+2

Không biết tại sao đây không phải là câu trả lời được đề nghị. – radpin

+0

mã là ok với một thay đổi quan trọng: sử dụng HttpUtility.HtmlAttributeEncode để hiển thị giá trị thuộc tính. – Liviu

+0

cũng chuyển đổi tên thẻ x_y thành x-y. Đây là cách TagBuilder làm điều đó. – Liviu

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