私は困惑しています。私のサイトはランダムに次のエラーをスローします:
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 フォルダ (views フォルダ内) の下の「en」という名前のフォルダに保存されます。ビューをレンダリングする方法は次のとおりです。
<% 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% の確率で話しています) 正常に動作しているのに、部分ビューが見つからないことがある理由はありますか?