Пользовательский атрибут с тире в имени с помощью помощников EditorFor / TextBoxFor / TextBox - PullRequest
17 голосов
/ 29 июня 2011

Я использую Knockout-JS, чтобы связать свойства моего представления с моделью представления. Knockout-JS использует пользовательский атрибут под названием «привязка данных», который необходимо добавить к элементам управления, в которых вы хотите быть привязанными для просмотра объектов модели.

Пример:

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

Обратите внимание на атрибут data-bind.

В моем представлении представления у меня возникают проблемы при отображении текстового поля с этим атрибутом. Мне известно, что все помощники Html.EditorFor, Html.TextBoxFor и Html.TextBox получают анонимный объект, который можно использовать для указания пользовательских атрибутов. Единственная проблема в этой реализации - C # не допускает тире в качестве имен переменных, поэтому это не скомпилируется: @ Html.EditorFor (m => m.FirstName, new {data-bind = "value: 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'>

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

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

1 Ответ

28 голосов
/ 30 июня 2011

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

...