質問

私は困惑しています。私のサイトはランダムに次のエラーをスローします:

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"という名前のフォルダーに保存されます。共有フォルダー(ビューフォルダー内)の下。ビューをレンダリングする方法は次のとおりです。

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

ViewData [&quot; lang&quot;]は、ベースコントローラーの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 [&quot; lang&quot;]は常に私のビューで使用できるはずです。

一部のビューが時々見つからないのに、ほとんどの場合(私は90%の時間を話している)うまくいく理由は何ですか?

役に立ちましたか?

解決

エラーは「部分ビュー「/ SiteUserMenu」が見つかりませんでした」を指しているため、 'en' が表示されないことがわかります。デバッグを開始する最適な場所は、 ViewData [&quot; lang&quot;] であることをお勧めします。エラーを毎回複製する手順を作成できるかどうかを確認し、ソリューションをデバッグして、コントローラーのエラーアクションメソッドで ViewData [&quot; lang&quot;] が設定されているかどうかを確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top