2013-08-11 12 views
9

Attributi dati per l'editor per non funzionare.Attributi dei dati con l'editor html per mvc

@Html.EditorFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" }) 

Quando apro il browser Chrome non vedo alcun attributo dati per la mia casella di testo. Ho provato a goggare e non ho trovato nulla di utile.

risposta

11

Il secondo parametro object per Html.EditorFor non è per gli attributi HTML, è per dati di visualizzazione aggiuntivi. Gli helper EditorFor non consentono la personalizzazione degli attributi HTML nel modo in cui, ad es. più specifici sono gli helper <input> che prendono la maggior parte delle impostazioni dai metadati del modello (ad esempio [Attributes]).

modo più semplice per "fissare" è, ovviamente, cadendo EditorFor:

@Html.TextBoxFor(model => model.SireTag, new { data_typeahead = "dsfsdfsd" }) 

In alternativa, scrivere il proprio EditorTemplate per la proprietà. Ciò potrebbe consentire di utilizzare (o semplificare) la sintassi originale, recuperando il valore data_typeahead da ViewData["data_typeahead"] (o "typeahead").

un passo ulteriore, più avanzato, si può fare il vostro proprio Attribute da applicare alle proprietà modello + il proprio ModelMetadataProvider (o - più semplice - utilizzare IMetadataAware, più su quello sotto) per trasformarlo in metadati che l'EditorTemplate potrebbe usare - questo al fine di rimuovere la decisione circa data- attributi del tutto dalla tua vista, trasformando la vostra chiamata in:

@Html.EditorFor(model => model.SireTag) 

... e il tuo modello in qualcosa di simile:

public class MyModel 
{ 
    [Typeahead("dsfsdfsd")] 
    public string SireTag { get; set; } 
} 

Example of this approach using IMetadataAware

+0

Grazie mille che logica e soluzione funziona .. grande .... –

+1

Anche se questa soluzione funziona, @MarosDimitrio ha pubblicato un overload del metodo 'EditorFor' che accetta attributi HTML. –

13

In realtà si può utilizzare EditorFor e inviare ulteriori attributi HTML. Utilizzare questo overload e impostare i parametri additionalViewData. Si aspetta un oggetto con una proprietà htmlAttributes:

@Html.EditorFor(
    model => model.SireTag, 
    new { 
     htmlAttributes = new { data_typeahead = "dsfsdfsd" } 
    } 
) 

Questo genererà qualcosa come:

<input id="SireTag" name="SireTag" ... data-typeahead="dsfsdfsd"> 
+1

Questa dovrebbe essere la risposta. –

Problemi correlati