Asp.net mvc MVC 3 razor TextBoxFor with ViewBag项抛出错误?

Asp.net mvc MVC 3 razor TextBoxFor with ViewBag项抛出错误?,asp.net-mvc,razor,editorfor,viewbag,Asp.net Mvc,Razor,Editorfor,Viewbag,试图用我从ViewBag收到的数据在网页上打印出几个不同的表单 第一条语句有效,但第二条语句无效: @Html.EditorForModel(ViewBag.PI as PItem) @Html.TextBoxFor(x => (ViewBag.PI as PItem).Text) 我还尝试了以下操作(相同的错误消息): 第一个为PItem创建模型,第二个在我尝试为PItem中的文本项创建文本框时抛出错误。是否可以使用textboxfor helper从ViewBag而非模型打印数据?t

试图用我从ViewBag收到的数据在网页上打印出几个不同的表单

第一条语句有效,但第二条语句无效:

@Html.EditorForModel(ViewBag.PI as PItem)
@Html.TextBoxFor(x => (ViewBag.PI as PItem).Text)
我还尝试了以下操作(相同的错误消息):


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

textboxfor
用于强类型视图和视图模型。因此,请剪切
ViewData/ViewBag
c..p并正确使用这些辅助工具:

@model MyViewModel
@Html.TextBoxFor(x => x.Text)
如果需要循环,请使用EditorTemplates:

@model IEnumerable<MyViewModel>
@Html.EditorForModel()
@model IEnumerable
@Html.EditorForModel()
在相应的编辑器模板中:

@model MyViewModel
<div>@Html.TextBoxFor(x => x.Text)</div>
@model MyViewModel
@Html.TextBoxFor(x=>x.Text)
不仅如此,现在我们有了智能感知和强大的类型,而且代码还能工作


结论和我的2:不要在ASP.NET MVC中使用ViewBag/ViewData,要高兴。

TextBoxFor
用于强类型视图和视图模型。因此,请剪切
ViewData/ViewBag
c..p并正确使用这些辅助工具:

@model MyViewModel
@Html.TextBoxFor(x => x.Text)
如果需要循环,请使用EditorTemplates:

@model IEnumerable<MyViewModel>
@Html.EditorForModel()
@model IEnumerable
@Html.EditorForModel()
在相应的编辑器模板中:

@model MyViewModel
<div>@Html.TextBoxFor(x => x.Text)</div>
@model MyViewModel
@Html.TextBoxFor(x=>x.Text)
不仅如此,现在我们有了智能感知和强大的类型,而且代码还能工作


结论和我的第二点:不要在ASP.NET MVC中使用ViewBag/ViewData,要开心。

好的,所以我应该在模型中发送数据,而不是使用ViewBag。但是如何将模型数据传递到布局页面?因为我想在布局页面中呈现其中一个表单。@Patrick,您可以使用子操作和助手。是否有示例?我的问题是,我可以从布局中访问ViewBag,但不能从模型中访问。如果我将搜索信息添加到模型中,那么我将无法在布局中呈现它。好的,因此我应该在模型中发送数据,而不是使用ViewBag。但是如何将模型数据传递到布局页面?因为我想在布局页面中呈现其中一个表单。@Patrick,您可以使用子操作和助手。是否有示例?我的问题是,我可以从布局中访问ViewBag,但不能从模型中访问。如果我随后将有关搜索的信息添加到模型中,则无法在布局中渲染它。