2013-08-11 9 views
9

Atrybuty danych dla edytora nie działają.Atrybuty danych z edytorem html dla mvc

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

Kiedy otworzyć przeglądarkę Chrome nie mogę zobaczyć żadnych danych atrybutu na moim polu tekstowym. Próbowałem gogli i nie znalazłem nic przydatnego.

Odpowiedz

11

Drugi parametr object dla Html.EditorFor nie jest przeznaczony do atrybutów HTML, ale do dodatkowych danych widoku. Pomoce EditorFor nie pozwalają na dostosowywanie atrybutów HTML w taki sposób, aby np. im bardziej specyficzni są pomocnicy <input> - pobierają większość konfiguracji z metadanych modelu (na przykład [Attributes]).

Najłatwiej "naprawić" jest oczywiście spada EditorFor:

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

Alternatywnie, wyraź swoją EditorTemplate dla nieruchomości. Może to pozwolić na użycie (lub uproszczenie) oryginalnej składni poprzez pobranie wartości data_typeahead z ViewData["data_typeahead"] (lub "typeahead").

krok dalej, bardziej zaawansowany, można tworzyć własne Attribute zastosowanie do właściwości modelu + wlasne ModelMetadataProvider (lub - prościej - użyj IMetadataAware, więcej o tym poniżej), aby przekształcić go w metadanych że EditorTemplate mógł wykorzystać - to w celu usunięcia decyzję o data- atrybuty całkowicie z widoku, zamieniając swoje wezwanie do:

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

... i modelu w coś jak:

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

Example of this approach using IMetadataAware

+0

dziękuję, że logiczne i rozwiązanie działa .. super .... –

+1

Chociaż to rozwiązanie działa, @MarosDimitrio opublikował przeciążenie metody 'EditorFor', która akceptuje atrybuty HTML. –

13

Faktycznie ty można używać edytoraDla i wysyłać dodatkowe atrybuty HTML. Użyj tego overload i ustaw parametry additionalViewData. Spodziewa obiekt z właściwością htmlAttributes:

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

To będzie generować coś takiego:

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

To zdecydowanie powinna być odpowiedź. –

Powiązane problemy