我有一个使用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文件恢复到早期版本,但似乎仍无法解决问题。
我有其他解决方案使用相同的技术继续工作。
有没有什么可以建议的,为什么这突然停止工作以及我如何解决它(正确方向的任何提示都会受到赞赏)?
答案 0 :(得分:1)
我们做了那个改变因为我们想要与[]索引器有点对称。 Eval()方法使用反射并查看模型以检索值。索引器只查看直接添加到字典中的项目。
答案 1 :(得分:0)
我决定用ViewData.Eval(“blah”)替换ViewData [“blah”]的所有实例。 但是,如果可能的话,我想知道这种变化的原因,因为:
答案 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中访问。但是,如果你不进行强类型的视图,那将只是一个很好的旧对象......