Бритва MVC 3 TextBox для с элементом ViewBag выдает ошибку? - PullRequest
1 голос
/ 18 мая 2011

Попытка распечатать несколько различных форм на веб-странице с данными, полученными из ViewBag.

Первое утверждение работает, но не второе:

@Html.EditorForModel(ViewBag.PI as PItem)
@Html.TextBoxFor(x => (ViewBag.PI as PItem).Text)

Я также попробовал следующее (то же сообщение об ошибке):

@Html.TextBoxFor(x => ViewBag.PI.Text)

Первый создает модель для PItem, а второй выдает ошибку, когда я пытаюсь создать текстовое поле для элемента Text внутри PItem. Можно ли использовать текстовое поле для помощника для распечатки данных из ViewBag, а не из модели?

1 Ответ

5 голосов
/ 18 мая 2011

TextBoxFor предназначен для использования со строго типизированными представлениями и моделями представления. Поэтому отрежьте ViewData/ViewBag c..p и правильно используйте этих помощников:

@model MyViewModel
@Html.TextBoxFor(x => x.Text)

Если вам нужно выполнить цикл, используйте EditorTemplates:

@model IEnumerable<MyViewModel>
@Html.EditorForModel()

и внутри соответствующего шаблона редактора:

@model MyViewModel
<div>@Html.TextBoxFor(x => x.Text)</div>

Мало того, что теперь у нас есть IntelliSense и строгая типизация, но в дополнение к этому код работает.

Заключение и мои 2: не используйте ViewBag / ViewData в ASP.NET MVC и будьте счастливы.

...