什么会导致部分视图突然被发现?

时间:2009-11-29 10:49:24

标签: asp.net-mvc exception master-pages partial-views

我很困惑。我的网站随机会引发以下错误:

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 [“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%)都能正常工作?

1 个答案:

答案 0 :(得分:3)

由于错误指向,无法找到部分视图'/ SiteUserMenu'。您可以看到它没有找到'en'。我建议开始调试的最佳位置是 ViewData [“lang”] 。看看你是否可以产生每次复制错误的步骤,然后调试到你的解决方案,看看你是否在控制器的错误操作方法中设置了 ViewData [“lang”]