0

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

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% の確率で話しています) 正常に動作しているのに、部分ビューが見つからないことがある理由はありますか?

4

1 に答える 1

3

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

于 2009-11-29T11:57:36.667 に答える