ASP.NET MVC ViewData(使用索引)

时间:2008-09-15 02:25:56

标签: asp.net-mvc

我有一个使用ASP.NET MVC Preview 3(从预览2解决方案升级)的工作解决方案,该解决方案使用无类型的ViewMasterPage,如下所示:

public partial class Home : ViewMasterPage

在Home.Master上有一个这样的显示语句:

<%= ((GenericViewData)ViewData["Generic"]).Skin %>

但是,团队中的开发人员只是将程序集引用更改为预览4。

在此之后,代码将不再使用索引值填充ViewData。

相反,ViewData [“Generic”]为空。

根据this question,ViewData.Eval(“Generic”)可以工作,ViewData.Model也可以正确填充。

然而,此解决方案不使用打印页面等的原因是因为它是一种传统解决方案。因此,通过这个相当大的解决方案并更新所有.aspx页面是不切实际的(特别是因为编译器没有检测到这种东西)。

我尝试通过删除引用然后在项目的“bin”文件夹中添加对Preview 3程序集的引用来恢复程序集。这并没有改变任何事情。我甚至尝试将Project文件恢复到早期版本,但似乎仍无法解决问题。

我有其他解决方案使用相同的技术继续工作。

有没有什么可以建议的,为什么这突然停止工作以及我如何解决它(正确方向的任何提示都会受到赞赏)?

5 个答案:

答案 0 :(得分:1)

我们做了那个改变因为我们想要与[]索引器有点对称。 Eval()方法使用反射并查看模型以检索值。索引器只查看直接添加到字典中的项目。

答案 1 :(得分:0)

我决定用ViewData.Eval(“blah”)替换ViewData [“blah”]的所有实例。 但是,如果可能的话,我想知道这种变化的原因,因为:

  1. 如果它在我的其他项目中发生,那么能够修复就好了。
  2. 保留已部署的工作代码并且不会覆盖这些更改会很好。
  3. 很高兴知道没有其他任何改变,我没有注意到。

答案 2 :(得分:0)

你是如何设置viewdata的?这对我有用:

控制器:

ViewData["CategoryName"] = a.Name;

查看:

<%= ViewData["CategoryName"] %>
顺便说一下,我现在正在预览5。但这已经在3和4 ......

答案 3 :(得分:0)

Re:Ricky

我只是在从Controller调用View()方法时传递一个对象。

我还注意到,在我已部署的服务器上没有更新任何内容,ViewData.Eval失败,ViewData [“index”]正常工作。

在我的开发服务器上,ViewData [“index”]失败,ViewData.Eval正常工作......

答案 4 :(得分:0)

是的,所以无论你传入View中的是什么,都可以在View as ViewData.Model中访问。但是,如果你不进行强类型的视图,那将只是一个很好的旧对象......