Почему модель не используется при использовании маршрутизации по умолчанию в ASP.NET MVC? - PullRequest
1 голос
/ 17 ноября 2011

У меня есть страница, содержащая объект Chart, который я использую в качестве маршрута по умолчанию в ASP.NET MVC. Когда я запускаю приложение, я получаю исключение из-за пустой ссылки. Если я использую URL с контроллером и явно указанным действием, все работает нормально.

Вот код, чтобы показать, что я имею в виду ...

В RegisterRoutes:

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>

Запуск приложения из отладчика с URL-адресом http://localhost:2313/ приводит к появлению NullReferenceExcpetion в первой строке, указанной выше в Index.aspx. Если я поставлю http://localhost:2313/Dashboard/Index в браузере, график будет отображаться правильно. Я установил точку останова в действии Index (), и он создает действительную модель и диаграмму, и точка останова срабатывает только один раз, прежде чем произойдет исключение.

Почему модель нулевая? Он должен создаваться каждый раз, когда мой метод действия вызывается из того, что я видел. В маршрутизации по умолчанию должно быть что-то еще, чего я не понимаю.

1 Ответ

0 голосов
/ 17 ноября 2011

Похоже, я ошибся из-за нулевой модели. Вопрос Smashd заставил меня задуматься об URL, и это стало причиной исключения. Хотя я не понимаю, почему для правильного отображения диаграммы требуется URL-адрес, я смог добавить способ ее решения.

Я изменил параметры маршрутизации по умолчанию следующим образом:

new { controller = "Dashboard", action = "Default" }

Затем я добавил новый метод действия в мой контроллер, который вызывает перенаправление:

public ActionResult Default()
{
    return RedirectToAction("Index");
}

Это приводит меня к Индексу с полностью сформированным URL. Для этого может быть лучшее решение, но по крайней мере перенаправление работает прозрачно.

...