2011-06-29 7 views
17

Używam Knockout-JS do wiązania właściwości w moim widoku z moim modelem widoku. Knockout-JS używa niestandardowego atrybutu o nazwie "powiązanie danych", który należy dołączyć do formantów, w których chcesz wiązać widok obiektów modelu.Atrybut niestandardowy z kreską w nazwie przy użyciu edytora EditorFor/TextBoxFor/TextBox helpery

przykład:

<input type='text' name='first-name' data-bind='value: firstName'/> 

Wskazówki atrybut 'danych wiążą'.

Podczas renderowania widoku występują problemy z renderowaniem pola tekstowego z tym atrybutem. Jestem świadomy, że pomocnicy Html.EditorFor, Html.TextBoxFor i Html.TextBox biorą anonimowy obiekt, za pomocą którego można określić niestandardowe atrybuty. Jedynym problemem związanym z tą implementacją jest C#, który nie zezwala na myślniki jako nazwy zmiennych, więc to się nie skompiluje: @ Html.EditorFor (m => m.FirstName, new {data-bind = "value: firstName"}) ;

Jedyne co mogę myśleć jest to (w widoku model):

public class DataBindingInput 
{ 
    public string Value { get; set; } 
    public string DataBindingAttributes { get; set } 
} 

public class MyViewModel 
{ 
    ... 
    public DataBindingValue firstName { get; set; } 
    .... 
} 

i szablon widoku nazywany "DataBindingInput.cshtml":

@model DataBindingInput 
<input type='text' data-binding='@Model.DataBindingAttributes' value='@Model.Value'> 

Jedyny problem z tym czy tracę automatyczne generowanie nazwy wejściowej, więc nie będzie działać po odesłaniu, ponieważ segregator modelu nie ma pojęcia, jak ją powiązać.

Jak mogę to ułatwić?

+7

Zobacz http://stackoverflow.com/questions/2520487/how-to-use-html-5-data-attributes-in-asp-net-mvc/4515095#4515095 –

+0

Dzięki, mam to do pracy: Wygląda jak EditorFor nie działał z EditorFor (m => m.firstName, new {data_binding = m.DataBindingAttributes}). Po dodaniu niestandardowego szablonu widoku i użycia TextBoxFor, wydawało się, że działa. Czy jest jakiś sposób to zrobić z EditorFor? –

+0

To samo pytanie tutaj - zmieniłem go z EditorFor na TextBoxFor i działało dobrze, ale to, co doprowadziło mnie najpierw do postu, o którym wspomniałem, Crescent Fresh, a następnie ten, próbował znaleźć sposób, w jaki można to zrobić za pomocą EditorFor. –

Odpowiedz

27

Dzięki Crescent Fish powyżej, wygląda na to, że możesz użyć podkreśleń, a MVC 3 przekonwertuje je na myślniki, ponieważ podkreślenia są niedozwolone w nazwach atrybutów HTML.

Powiązane problemy