Я использую Knockout-JS для привязки свойств в моем представлении к моей модели представления. Knockout-JS использует настраиваемый атрибут, называемый "привязкой данных", который вы должны добавить к элементам управления, в которых вы хотите привязываться к объектам модели.
Пример:
<input type='text' name='first-name' data-bind='value: firstName'/>
Обратите внимание на атрибут data-bind.
В моем представлении рендеринга мне не удается создать текстовое поле с этим атрибутом. Я знаю, что помощники Html.EditorFor, Html.TextBoxFor и Html.TextBox используют анонимный объект, который можно использовать для указания настраиваемых атрибутов. Единственная проблема с этой реализацией: С# не позволяет тире как имена переменных, поэтому это не будет компилироваться: @Html.EditorFor(m = > m.FirstName, новое {data-bind = "значение: firstName" });
Единственное, о чем я могу думать, это (в модели вида):
public class DataBindingInput
{
public string Value { get; set; }
public string DataBindingAttributes { get; set }
}
public class MyViewModel
{
...
public DataBindingValue firstName { get; set; }
....
}
И шаблон представления, называемый "DataBindingInput.cshtml":
@model DataBindingInput
<input type='text' data-binding='@Model.DataBindingAttributes' value='@Model.Value'>
Единственная проблема с этим - потерять автоматическое генерирование имени ввода, чтобы он не работал на пост-обратно, потому что связующее устройство не знает, как его связать.
Как я могу сделать эту работу?