Что может привести к тому, что частичное представление внезапно не будет найдено?

StackOverflow https://stackoverflow.com/questions/1815224

Вопрос

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

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% случаев) работает нормально?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top