Что может привести к тому, что частичное представление внезапно не будет найдено? - PullRequest
0 голосов
/ 29 ноября 2009

Я сбит с толку. Мой сайт случайно выдает следующую ошибку:

System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.InvalidOperationException: The partial view '/SiteUserMenu' could not be found. The following locations were searched:
/SiteUserMenu
   at System.Web.Mvc.HtmlHelper.FindPartialView(ViewContext viewContext, String partialViewName, ViewEngineCollection viewEngineCollection)
   at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, ViewEngineCollection viewEngineCollection)
   at System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(HtmlHelper htmlHelper, String partialViewName)
   at ASP.views_shared_site_master.__Render__control1(HtmlTextWriter __w, Control parameterContainer)

В большинстве случаев сайт работает нормально ... иногда выдает ошибку, что не имеет смысла для меня. Если частичный вид не был найден, почему бы ему не найти его иногда?

Частичное представление сохраняется в папке с именем en в папке Shared (внутри папки views). Вот как я отображаю представление:

<% Html.RenderPartial(ViewData["lang"] + "/SiteUserMenu"); %>

ViewData ["lang"] устанавливается в моем базовом контроллере в действии OnActionExecuting, например:

var l = (RouteData.Values["language"] != null) ? RouteData.Values["language"].ToString() : string.Empty;

if (string.IsNullOrEmpty(l))
    l = "en";

if (l.Contains("en"))
{
    IsEnglish = true;
    l = "en";
}
else
    l = "ja";

ViewData["lang"] = l.ToLower();
Language = l.ToLower();

Language и IsEnglish являются свойствами базового контроллера. Весь сайт использует их, чтобы поддерживать выбор языка и делать соответствующий выбор на основе языка. Если язык не установлен, он будет установлен на «en». Поэтому ViewData ["lang"] всегда должен быть доступен для моих представлений.

Есть ли причина, по которой частичное представление иногда не может быть найдено, хотя большую часть времени (я говорю 90% времени) оно работает нормально?

1 Ответ

3 голосов
/ 29 ноября 2009

Поскольку ошибка указывает на 'Частичное представление' / SiteUserMenu 'не может быть найдено.' вы можете видеть, что оно не принимает 'en' . Я бы предположил, что лучшее место для начала отладки - ViewData ["lang"] . Посмотрите, можете ли вы создавать шаги для репликации ошибки каждый раз, затем выполните отладку в своем решении, чтобы убедиться, что ViewData ["lang"] было установлено, пока вы находитесь в ошибочном методе действия вашего контроллера.

...