动态partial - viewdata null引用错误

时间:2012-02-29 20:23:08

标签: asp.net asp.net-mvc

我正在使用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的其他网站的环境中运行。


作为一个小小的附录,我会注意到:

  1. 用户没有看到此错误,只是报告给我(通过ELMAH)。

  2. 此代码在我的测试站点上正常运行,但在我的预生产部署站点(与测试站点位于同一服务器上并且当前运行相同代码)上出现空引用错误时失败。

  3. 我有点困惑。


    这个问题得到了答案(关于它发生原因的根本原因),但我仍然不确定为什么从部分视图声明中删除动态也会“修复”它。如果有人可以解释,我有兴趣听到它。

1 个答案:

答案 0 :(得分:0)

找出问题所在,将其记录下来。

  1. 有一个图像的网址,是在使用Html.RenderAction输出的不同局部视图中生成的。此网址不正确,导致返回404错误。
  2. 我的开发系统没有注意到这一点。

    1. 在实时中,如果在web.config中启用了自定义错误,则此404错误会尝试返回我们拥有的“filenotfound”页面。不幸的是,这个错误页面使用的是首先导致问题的主页面,并且它出错了,最终重定向到的主要“错误发生”页面也是如此。
    2. 这导致返回500服务器错误,这似乎中断了后续部分呈现的viewdata。

      对于萤火虫来说,万岁,因为这有助于我追踪它。

      希望如果你在某个时候找到自己,这会帮助你。