Как связать с конкретным элементом массива в ASP.NET MVC? - PullRequest
2 голосов
/ 22 февраля 2009

Я использую ASP.NET MVC RC1 и пытаюсь привязать текстовое поле к свойству объекта следующим образом:

<%= Html.TextBox("Comments.Contacts[0].ContactName") %>

Кажется, что это должно работать, так как это делает:

<%= ((MuralProject)ViewData.Model).Comments.Contacts[0].ContactName %>

Но, увы, результат в текстовом поле - пустая строка. Я что-то не так делаю?

1 Ответ

3 голосов
/ 22 февраля 2009

Первый аргумент для метода расширения текстового поля устанавливает имя входного элемента, который в конечном итоге создается, а также пытается получить запись из ViewData / Model (для модели, в которой он использует TypeDescriptors / reflection) на основе этого аргумента.

Способ, которым это происходит, заключается в разделении входной строки по точкам, затем проверке ViewDataDictionary на наличие определенных ключей и модели с помощью отражения, поэтому в случае, если вы дадите это, он будет пытаться искать Контакты [0], а не Контакты и не заберу вашу собственность.

Чтобы обойти это, вам нужно просто указать фактическое значение объекта, например,

Html.TextBox("Comments.Contacts[0].ContactName", 
             Model.Comments.Contacts[0].ContactName)

Вы можете увидеть это сами, если посмотрите на источник MVC и взгляните на класс ViewDataDictionary.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...