Asp.net mvc 为什么在ASP.NET MVC中使用默认路由时模型为空?
我有一个包含图表对象的页面,我在ASP.NET MVC中将其用作默认路由。当我运行应用程序时,由于空引用,我得到一个异常。如果我使用一个带有明确给出的控制器和操作的URL,那么一切都正常 下面是代码来说明我的意思 在注册表项中:Asp.net mvc 为什么在ASP.NET MVC中使用默认路由时模型为空?,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我有一个包含图表对象的页面,我在ASP.NET MVC中将其用作默认路由。当我运行应用程序时,由于空引用,我得到一个异常。如果我使用一个带有明确给出的控制器和操作的URL,那么一切都正常 下面是代码来说明我的意思 在注册表项中: routes.MapRoute("Default", "{controller}/{action}", new { controller = "Dashboard", action = "Index" }); DashboardModel.cs: public cla
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);
}
Index.aspx
<% chartPanel.Controls.Add(Model.MyChart); %>
<asp:Panel ID="chartPanel" runat="server"></asp:Panel>
上面Index.aspx中第一行的NullReferenceExcpetion结果。如果我在浏览器中输入,图表将正确显示。我在Index()操作中设置了一个断点,它创建了一个有效的模型和图表,并且在异常发生之前只命中一次断点
为什么模型为空?它应该在每次根据我所看到的调用我的操作方法时创建。默认路由肯定还有一些我不理解的地方。似乎我错认为模型为空。Smashd的问题让我更多地思考了URL,这就是异常的原因。虽然我不明白为什么图表需要一个URL才能正确显示,但我还是为这个问题添加了一个解决方法
我更改了默认路由参数,如下所示:
new { controller = "Dashboard", action = "Default" }
然后,我向控制器添加了一个新的操作方法,强制重定向:
public ActionResult Default()
{
return RedirectToAction("Index");
}
这使我能够使用完整格式的URL访问索引。可能有更好的解决方案,但至少重定向是透明的。在这两种情况下,它都会命中断点,对吗?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(字符串查询,字符串文件键,字符串当前GUID)+32 System.Web.UI.DataVisualization.Charting.ChartHttpHandler.GetChartImageUrl(MemoryStream流,字符串ImageText)+339 System.Web.UI.DataVisualization.Charting.Chart.Render(HtmlTextWriter编写器)+420。。。