2010-07-15 9 views

Respuesta

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

Si no desea utilizar el Diccionario genérico, Hashtable también implementa IDictionary.

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

la incorporada en HtmlHelper métodos de extensión suelen proporcionar sobrecargas que toman un parámetro object en lugar de IDictionary<string, object> el fin de permitir que llame a ellos utilizando un tipo anónimo como lo intentaste.

Si esta es su propio método, se puede crear otro método de extensión que se ve algo como esto:.

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

El constructor de RouteValueDictionary toma un objeto y se rellena a sí mismo usando las propiedades públicas del objeto pasado en la Primera Creo que esto también es lo que hacen los métodos de extensión HtmlHelper incorporados.

Como alternativa, puede llamar al método como este:

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

No he mirado, pero parece obvio que la clase RouteValueDictionary está haciendo una reflexión con el fin de ser capaz de identificar las propiedades de la objeto. Solo ten en cuenta, en caso de que sea algo que te preocupe.

5

Por si acaso otros se topan con esta pregunta también. Existe un método de ayuda que convertirá un objeto anónimo en un diccionario.

Por ejemplo:

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

En otras palabras, usted puede crear su método de ayuda HTML de acuerdo con la pregunta de la OP para tomar un objeto y utilizar este método de ayuda en el interior. P.ej.

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

    // ... rest of implementation 
} 
Cuestiones relacionadas