MVC 3剃须刀TextBoxFor with ViewBag项目会引发错误?

问题描述:

尝试使用我从ViewBag收到的数据在网页上打印出几种不同的表单。MVC 3剃须刀TextBoxFor with ViewBag项目会引发错误?

第一条语句的作品,但没有第二:

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

我也试过以下(同样的错误消息):

@Html.TextBoxFor(x => ViewBag.PI.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 MyViewModel 
<div>@Html.TextBoxFor(x => x.Text)</div> 

不仅如此,我们有智能感知和强大的打字,但除此之外,代码的作品。

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

+0

好的,所以,而不是使用ViewBag我应该发送模型中的数据。但是,我如何将模型数据传递给布局页面?因为我想呈现布局页面内的一种形式。 – Patrick 2011-05-18 14:30:05

+0

@帕特里克,你可以使用子动作和[Html.Action]助手(http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx)。 – 2011-05-18 15:48:00

+0

有没有例子吗?我的问题是,我可以从布局访问ViewBag,但不能访问模型。如果我然后将关于我们的搜索的信息添加到模型中,那么我无法在布局中呈现它。 – Patrick 2011-05-19 08:00:57