【发布时间】:2011-12-30 22:08:12
【问题描述】:
我有一个包含 Chart 对象的页面,我将其用作 ASP.NET MVC 中的默认路由。当我运行应用程序时,由于空引用而出现异常。如果我使用带有明确给出的控制器和操作的 URL,则一切正常。
这是显示我的意思的代码......
在注册路由中:
routes.MapRoute("Default", "{controller}/{action}", new { controller = "Dashboard", action = "Index" });
DashboardModel.cs:
public class DashboardModel
{
public Chart MyChart { get; set; }
}
DashboardController.cs
public ActionResult Index()
{
Chart chart = CreateChart();
DashboardModel dm = new DashboardModel();
dm.MyChart = chart;
return View(dm);
}
索引.aspx
<% chartPanel.Controls.Add(Model.MyChart); %>
<asp:Panel ID="chartPanel" runat="server"></asp:Panel>
使用 URL http://localhost:2313/ 从调试器启动应用程序会导致在 Index.aspx 中上面给出的第一行出现 NullReferenceExcpetion。如果我在浏览器中输入http://localhost:2313/Dashboard/Index,图表就会正确显示。我在 Index() 操作中设置了一个断点,它创建了一个有效的模型和图表,并且在异常发生之前断点只被命中一次。
为什么模型为空?每次从我看到的内容中调用我的操作方法时,都应该创建它。我不理解的默认路由肯定有更多的事情发生。
【问题讨论】:
-
在这两种情况下,它都会达到您的断点,对吗? CreateChart() 中是否有任何东西可以检查 URL 或路径信息?
-
chartPanel 或 chartPanel.Controls 是否有可能与模型相比为空?
-
@Smashd,是的,我的断点在这两种情况下都被命中。 CreateChart 中没有任何东西检查 URL,它只是从存储库中获取数据,然后在数据库中执行存储过程。
-
@StevenBerkovitz,可能模型不为空,但图表属性为空。这是调用堆栈:[NullReferenceException:对象引用未设置为对象的实例。] System.Web.UI.DataVisualization.Charting.ChartHttpHandler.GetHandlerUrl() +67 System.Web.UI.DataVisualization.Charting.ChartHttpHandler。 GetUrl(String query, String fileKey, String currentGuid) +32 System.Web.UI.DataVisualization.Charting.ChartHttpHandler.GetChartImageUrl(MemoryStream stream, String imageExt) +339 System.Web.UI.DataVisualization.Charting.Chart.Render(HtmlTextWriter作家)+420 ...
标签: asp.net-mvc asp.net-mvc-routing