尝试使用从ViewBag收到的数据在网页上打印出几种不同的表单。
第一个声明有效,但没有第二个声明:
@Html.EditorForModel(ViewBag.PI as PItem)
@Html.TextBoxFor(x => (ViewBag.PI as PItem).Text)
我也尝试了以下(相同的错误消息):
@Html.TextBoxFor(x => ViewBag.PI.Text)
第一个为PItem创建模型,第二个在我尝试为PItem中的Text项创建文本框时抛出错误。是否可以使用textbox for helper打印ViewBag中的数据而不是模型?
答案 0 :(得分:5)
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>
不仅如此,我们现在拥有智能感知和强大的打字功能,但除此之外,代码还可以运行。
结论和我的2¢:不要在ASP.NET MVC中使用ViewBag / ViewData并且开心。