我正在使用MVC 2和.net 4.0运行网站。
我最近为网站添加了一个新的部分视图,如下所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<% if (!(bool)ViewData["Master_ShowGuide"] )
{ %>
<%= Html.NavigationButton("Guide", "button", "infoIcon", Url.Content("~/Help/ Guide.pdf"), new { title = "Click here to view an in depth user guide." }, new { target="_blank" })%>
<%} %>
当时我没有注意到的是<dynamic>
部分添加到此视图中,之前我的部分看起来像这样:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
此部分显示使用:
<% Html.RenderPartial("SubLinks"); %>
在我的母版页上。
这似乎在我的开发环境中正常工作,但是当部署到服务器时,我现在遇到我的ViewData["Master_ShowGuide"]
为空的问题。我知道情况并非如此,因为它在母版页的其他地方使用就好了。
任何人都可以解释为什么会出现这种情况 - 我通过从部分定义中删除<dynamic>
类型来“修复”此问题,但我对原因感到好奇。
如果有任何帮助,我的网站会在运行MVC 3的其他网站的环境中运行。
作为一个小小的附录,我会注意到:
用户没有看到此错误,只是报告给我(通过ELMAH)。
此代码在我的测试站点上正常运行,但在我的预生产部署站点(与测试站点位于同一服务器上并且当前运行相同代码)上出现空引用错误时失败。
我有点困惑。
这个问题得到了答案(关于它发生原因的根本原因),但我仍然不确定为什么从部分视图声明中删除动态也会“修复”它。如果有人可以解释,我有兴趣听到它。
答案 0 :(得分:0)
找出问题所在,将其记录下来。
我的开发系统没有注意到这一点。
这导致返回500服务器错误,这似乎中断了后续部分呈现的viewdata。
对于萤火虫来说,万岁,因为这有助于我追踪它。希望如果你在某个时候找到自己,这会帮助你。