Подтвердить что ты не робот

Пользовательский атрибут с тире в имени с помощью помощников EditorFor/TextBoxFor/TextBox

Я использую 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'>

Единственная проблема с этим - потерять автоматическое генерирование имени ввода, чтобы он не работал на пост-обратно, потому что связующее устройство не знает, как его связать.

Как я могу сделать эту работу?

4b9b3361

Ответ 1

Благодаря Crescent Fish выше, похоже, вы можете просто использовать символы подчеркивания, а MVC 3 преобразует их в тире, так как подчеркивания недопустимы в именах атрибутов HTML.