Динамическая частичная - ошибка нулевой ссылки viewdata - PullRequest
1 голос
/ 01 марта 2012

Я управляю сайтом, используя 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. Этот код работает нормально на моем тестовом сайте, но завершается неудачно с ошибкой нулевой ссылки на моем сайте предварительного развертывания (который находится на том же сервере, что и тестовый сайт и в настоящее время выполняется тот же код).

Я немного озадачен.


Был найден ответ на этот вопрос (относительно основной причины, по которой это происходит), но я все еще не уверен, почему удаление динамического из объявления частичного представления также «исправило бы» его. Если кто-нибудь может объяснить, мне было бы интересно услышать это.

1 Ответ

0 голосов
/ 01 марта 2012

Узнал, в чем проблема, собираюсь записать ее для потомков.

  1. У него был URL-адрес изображения, сгенерированный в другом частичном представлении, которое выводилось с использованием Html.RenderAction. Этот URL был неверным, в результате чего была возвращена ошибка 404.

Это не было замечено в моей системе разработки.

  1. В прямом эфире, с пользовательскими ошибками, включенными в web.config, эта ошибка 404 пыталась вернуть страницу «filenotfound», которая у нас есть. К сожалению, эта страница с ошибкой использовала ту же главную страницу, которая изначально вызывала проблему, и вызвала ошибку, так же как и главная страница «произошла ошибка», на которую вы в конечном итоге были перенаправлены.

В результате была возвращена ошибка сервера 500, и это, похоже, нарушило данные представления для последующей частичной визуализации.

Ура для firebug, так как это помогло мне отследить это.

Надеюсь, это поможет вам, если вы когда-нибудь окажетесь здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...