2011-12-19 15 views
29

Jak wiesz, możemy ustawić atrybuty na actionLink lub textBox w widokach maszynki, ale jak ustawić atrybuty na @Html.EditorFor, wiem, że EditorFor jest dynamicznym elementem, który można ustawić zgodnie z typem modelu, ale wszystkie kształty mogą uzyskać atrybuty. Czy jest jakiś sposób ustawić atrybut na @Html.EditorFor coś takiego: new {@class = "myclass"}?Ustaw atrybut klasy na Html.EditorFor w ASP.NET MVC Razor View

+0

Brak przeciążenia dla tego, więc nie można tego zrobić. Dlaczego po prostu nie użyjesz właściwego typu (np. TextBox) i przekażesz go do tego – musefan

Odpowiedz

40

Pomocnik EditorFor renderuje odpowiedni szablon edytora. Może to być default template lub niestandardowy szablon, który napisałeś. Ten szablon może zawierać dowolny znacznik. Może zawierać wiele elementów DOM. Teraz rozumiesz, że prośba o zastosowanie klasy do szablonu nie ma żadnego sensu. Do którego elementu w tym szablonie chcesz zastosować tę klasę? Na przykład z pomocnikiem TextBoxFor wiesz, że wygeneruje on jedno pole wejściowe, więc warto porozmawiać o zastosowaniu do niego klasy CSS (właśnie to umożliwia ci argument htmlAttributes).

Mówi się, że istnieją różne techniki. Na przykład taki, który bardzo mi się podoba, to napisanie niestandardowego dostawcy metadanych wzorców danych i niestandardowych szablonów edytora, jak opisano w following blog post.

Inną możliwością jest dostosowanie domyślnych szablonów (jak pokazano w poście na blogu Brada Wilsona) i zastosowanie różnych atrybutów HTML do odpowiedniego pola wejściowego. Weźmy przykład z string.cshtml szablonu edytora:

@model string 
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, ViewData) 

a teraz, gdy chcesz, aby uczynić ten szablon edytora dla niektórych właściwości String modelu Widok:

@Html.EditorFor(x => x.SomeStringProperty, new { @class = "myclass" }) 
+0

Używam tej klasy dla wejść z type = (text, file) i select (drop down). – Saeid

+0

@dotNetist, OK, tak jak przedstawiono w mojej odpowiedzi masz kilka różnych sposobów na wdrożenie tego. –

+0

dziękuję, ale zanim przeczytałem referencje, o których wspomniałeś, mam pytanie na ten temat: nie chcę ustawiać atrybutu dla wszystkich typów łańcuchów (na przykład), mam atrybut custome (w moim modelu) i zmieniłem szablon kodu (T4) i potrzebuję tej właściwości z tym konkretnym atrybutem niestandardowym, aby ustawić atrybut "myclass" w edytorze dla pomocnika, więc czy myślisz, czy nie? – Saeid

2

wierzę, że oryginalny plakat był poprawny

  • każdy EditorFor()

    tworzy główny HTML element (choć mogą istnieć inne obecne), więc byłoby to bardzo pomocne, aby móc zdać obiekt zawierający HTML attributes zastosowanie do tego głównego HTML element.

  • Chcę zastosować „autofocus” HTML 5 atrybutem jednej dziedzinie na każdym formie,

  • ale nie chcę, aby napisać kod niestandardowy.

  • Nienawidzę fakt, że jestem obecnie zredukowany do korzystania np @Html.TextBoxFor() dla tej jednej dziedzinie po prostu tak, że można zastosować specyficzne atrybuty do input element.

  • Sposób EditorFor() ma parametr nazywają additionalViewData, ale nie mam pojęcia, co można zrobić z tym i wyszukaniu MSDN nie było żadnej pomocy do mnie.

48

Spróbuj tego:

@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } }) 
+2

To nie działa. –

+3

to nie jest robota, ponieważ jest to MVC 5 – HellBaby

+2

HellBaby ma rację, że jest to nowa składnia dla MVC 5. new {htmlAttributes = new {@style = "width: 20px"}} jako przykład działa dla stylu również atrybut. – Nimblejoe

-1

Spróbuj tego prostego kodu do dodawania klasę @Html.EditorFor()

@Html.EditorFor(x => x.Demo) 

<style type="text/css"> 

#Demo 
{ 
    color:#fff; 
    width: 50%; 
} 

</style> 

ten kod działa poprawnie MVC3

4

Dodaj niestandardowe atrybuty jak

@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @data_minlength = "3", @class = "form-control input-md", @placeholder = "Name", @required = "required", @id= "txtName"} }) 

Wymień teleinformatyczny do @data_

To wygeneruje poprawny HTML z DATA-

Powiązane problemy