Я сбит с толку. Мой сайт случайно выдает следующую ошибку:
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% времени) оно работает нормально?