2010-07-15 20 views

Trả lời

23
<%= Html.Blah(new Dictionary<string, object>(){ 
                { "key", "value" }, 
                { "key1", someObj }, 
                { "blah", 1 } 
               }); 
1

Nếu bạn không muốn sử dụng từ điển chung, Hashtable cũng thực hiện IDictionary.

Html.Blah(new Hashtable(){ 
         {"id", "blah"} 
        }); 
4

Việc xây dựng trong HtmlHelper phương pháp khuyến nông thường cung cấp quá tải mà phải mất một tham số object thay vì IDictionary<string, object> để cho phép bạn gọi cho họ sử dụng một loại vô danh như bạn cố gắng.

Nếu đây là phương pháp riêng của bạn, bạn có thể tạo ra một phương pháp mở rộng trông giống như thế này:.

public static string Blah(this HtmlHelper html, object htmlAttributes) 
    { 
     return html.Blah(new RouteValueDictionary(htmlAttributes)); 
    } 

constructor của RouteValueDictionary mất một đối tượng và populates bản thân bằng cách sử dụng tài sản công cộng của đối tượng thông qua trong tôi tin rằng điều này thường là những gì các phương pháp mở rộng HtmlHelper được xây dựng trong làm như là tốt.

Ngoài ra, bạn có thể gọi phương thức như thế này:

 html.Blah(new RouteValueDictionary(new { id = "blah" })); 

Tôi đã không nhìn, nhưng có vẻ như rõ ràng rằng lớp RouteValueDictionary đang làm một số phản ánh để có thể xác định các tính chất của vật. Chỉ cần lưu ý, trong trường hợp đó là điều bạn quan tâm.

5

Chỉ trong trường hợp những người khác cũng tham gia vào câu hỏi này. Có một phương thức trợ giúp sẽ chuyển đổi một đối tượng ẩn danh thành một từ điển.

Ví dụ:

HtmlHelper.AnonymousObjectToHtmlAttributes(new { ng_model = "vm" }); 

Nói cách khác, bạn có thể tạo phương pháp helper HTML của bạn theo câu hỏi của OP để có một đối tượng và sử dụng phương thức này để bên trong. Ví dụ.

public static string Blah(this HtmlHelper html, object htmlAttributes) 
{ 
    // Create a dictionary from the object 
    HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); 

    // ... rest of implementation 
} 
Các vấn đề liên quan