2008-09-15 191 views
1

我不得不使用ASP.NET MVC第三个预览版(从预览版2溶液升级)使用非类型化的ViewMasterPage像这样一个工作的解决方案:ASP.NET MVC的ViewData(使用指数)

public partial class Home : ViewMasterPage 

回家的.master有一个显示声明是这样的:

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

然而,在团队的开发人员只是改变了程序集引用预览4.

在此之后,该代码将不再填充ViewData与索引值如上。

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

根据this question,ViewData.Eval(“Generic”)有效,ViewData.Model也正确填充。

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

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

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

有什么可以建议的,为什么这个突然停止工作,我怎么可能去修复它(任何暗示正确的方向将不胜感激)?

回答

1

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

+0

好的,谢谢澄清。 – 2008-09-21 15:28:30

0

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

  1. 如果它发生在我的其他项目它会是不错的能够解决。
  2. 这将是很好的离开部署的工作代码,而不是覆盖这些更改。
  3. 很高兴知道没有其他改变,我没有注意到。
0

你是如何设置viewdata的?这个工作对我来说:

控制器:

ViewData["CategoryName"] = a.Name; 

查看:

<%= ViewData["CategoryName"] %> 

BTW,我是在第五个预览版现在。但是,这已经工作3日和4 ...

0

回复:瑞奇

我只是传递一个对象时,我打电话从控制器的视图()方法。

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

在我的开发服务器计算机[“指数”]失败,ViewData.Eval工程...

0

呀,所以不管你传递到视图在查看ViewData.Model访问。但是,如果你不做强类型的视图,这将只是一个很好的旧对象...

+0

是的,我明白了。 问题是,ViewData [“等等”]停止设置,我想知道为什么(猜测MVC预览4改变了这一点,但想确认)。 我想我也想知道为什么我似乎无法撤销开发人员的参考更改 – 2008-09-15 23:28:48