带有ViewBag项的MVC 3剃须刀TextBoxFor会抛出错误?

Pat*_*ick 1 asp.net-mvc editorfor razor viewbag

尝试使用从ViewBag收到的数据在网页上打印出几种不同的表单.

第一个声明有效,但没有第二个:

@Html.EditorForModel(ViewBag.PI as PItem)
@Html.TextBoxFor(x => (ViewBag.PI as PItem).Text)
Run Code Online (Sandbox Code Playgroud)

我也尝试了以下(相同的错误消息):

@Html.TextBoxFor(x => ViewBag.PI.Text)
Run Code Online (Sandbox Code Playgroud)

第一个为PItem创建模型,第二个在我尝试为PItem中的Text项创建文本框时抛出错误.是否可以使用textbox for helper打印ViewBag中的数据而不是模型中的数据?

Dar*_*rov 5

TextBoxFor旨在与强类型视图和视图模型一起使用.所以切断ViewData/ViewBagc..p并正确使用这些助手:

@model MyViewModel
@Html.TextBoxFor(x => x.Text)
Run Code Online (Sandbox Code Playgroud)

如果需要循环,请使用EditorTemplates:

@model IEnumerable<MyViewModel>
@Html.EditorForModel()
Run Code Online (Sandbox Code Playgroud)

在相应的编辑器模板中:

@model MyViewModel
<div>@Html.TextBoxFor(x => x.Text)</div>
Run Code Online (Sandbox Code Playgroud)

不仅如此,我们现在拥有IntelliSense和强类型,但除此之外,代码也可以运行.

结论和我的2¢:不要在ASP.NET MVC中使用ViewBag/ViewData并且要开心.