Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 为什么在ASP.NET MVC中使用默认路由时模型为空?_Asp.net Mvc_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc 为什么在ASP.NET MVC中使用默认路由时模型为空?

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

我有一个包含图表对象的页面,我在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);
}
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。。。