Руководство по использованию помощников стиля Html.*For
- это то, что вы можете оставаться строго типизированным. Если вы используете что-то вроде Html.TextBox("Foo")
, а затем избавитесь от своего свойства Foo
или измените его, представление с удовольствием продолжит рендеринг ввода для Foo
, независимо. Но если вы используете Html.TextBoxFor(Function(x) x.Foo)
, то Intellisense покажет вам, что есть проблема.
Однако помощники For
не имеют тенденцию хорошо играть с шаблонами редакторов, просто потому, что контекст того, что является «моделью», изменяется внутри шаблона редактора. Теперь вы работаете только с собственностью, а не с полной моделью, которую вы видели. Вот это на самом деле лучше использовать непредоставлением For
помощников и передать пустую строку в качестве имени свойства, т.е .:
@Html.TextBox("")
Бритва будет контекстуально заполнить правильное значение для вас.
В вашем конкретном сценарии здесь. Шаблон редактора - плохой выбор. Во-первых, они не предназначены для борьбы с перечислимыми. Вы можете использовать Html.EditorFor
на перечислимом, но то, что он действительно делает, это проверить внутренний тип и визуализировать шаблон редактора для этого типа для каждого элемента в перечисляемом, а не одном шаблоне для всего перечислимого свойства. Кроме того, как отметил Стивен Мюкке в комментариях, было бы гораздо лучше объединить строку, а затем передать эту комбинированную строку в ваше представление. Здесь вид модели поставляются в удобной, потому что вы можете создать что-то вроде следующего:
Public Class FooViewModel
Public Property Tags As IEnumerable(Of be_PostTag)
Public Property TagsAsString As String
Get
Return String.Join(",", Tags.Select(Function(x) x.Tag))
End Get
Set(ByVal Value As String)
Tags = Value.Split(",").Select(Function(x) New be_PostTag With { .Tag = x })
End Set
End Property
End Class
Тогда, на ваш взгляд:
@Html.TextBoxFor(Function (x) x.TagsAsString)
несколько предостережений. Я парень на C#, поэтому возьмите этот код с солью. Для чего это стоит, VB.NET быстро снижает популярность, и тем более в сочетании с ASP.NET MVC. Для вашего собственного наставления я бы рекомендовал собрать C#, и особенно когда у вас возникнут проблемы, вы найдете более полезные и полезные ответы, поскольку пул разработчиков ASP.NET MVC C#, которые могут вам помочь, это много больше.
Возможно, было бы более поучительно узнать о проблеме, которую вы пытаетесь решить (см .: http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Является ли то, что у вас здесь, правильный или хороший подход, во многом зависит от того, чего вы пытаетесь достичь. –
Я добавил дополнительную информацию выше. –
'TextArea()' и 'TextAreaFor()' привязка к свойству, но модель - это коллекция. Требуется ли текстовая область для каждого элемента в вашей коллекции или объединить все элементы в одно значение «строка» и отобразить текстовую область для этого значения? –