我很困惑。我的网站随机抛出以下错误:
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)
大多数时候,该网站运行良好......有时它会抛出上述错误,这对我来说毫无意义。如果没有找到局部视图,为什么有时会找不到?
局部视图保存在 Shared 文件夹下名为“en”的文件夹中(在 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% 的时间)它工作正常?