【问题标题】:What would cause a partial view to suddenly not be found?什么会导致突然找不到局部视图?
【发布时间】:2009-11-29 19:57:36
【问题描述】:

我很困惑。我的网站随机抛出以下错误:

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% 的时间)它工作正常?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢...也许路线让某些东西通过?但是上面的例程应该总是将 ViewData["lang"] 设置为 "en" 无论如何......嗯......
    • 嗯,为什么 OnActionExecuting 不会被调用?
    • 我不知所措...来自本地开发框,OnActionExecuting 总是触发...永远不会导致我描述的问题。在我的主机上,它似乎没有随机触发。主机是 IIS 6,这会导致问题吗?
    • 奇怪...我的错误记录器似乎总是记录该错误,即使它不是引发异常的原因...也许我正在做某事。感谢您发布您的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-09-29
    • 2013-12-20
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多