2017-04-08 57 views
0

我已经得到了所有MVC 5按预期工作的传统网站,一切呈现正确,并正常工作。如何正确获取嵌套文件夹在MVC 5中渲染C#

我已经添加了一个仪表板,这个仪表板我试图设置为文件夹结构,直到它与MVC 5 C#网站的其余部分隔离;但是,我收到一个服务器错误,指出布局引擎找不到我的部分视图。

现在,当视图本身加载时,这是传递测试并确实返回了正确的视图,问题出现在布局引擎无法找到嵌套的部分视图时。

由于我没有MVC 5完全理解的事实,我迷失于此。

现在,就像之前提到的那样,所有工作都完全适用于开箱即用的文件夹结构,但是当我创建嵌套文件夹并放置部分视图时,MVC 5引擎无法找到这些嵌套的部分视图。

嵌套这些部分视图的原因很明显,我将实际的传统网站与用户仪表板视图分开。

当我点击指向索引文件的操作链接时,这个工作正常,但是当正文“视图”试图渲染它时,找不到嵌套的“部分视图”。

我在这里错过了什么?我希望我能够提供足够的信息来尽可能简单地回答这个问题。

载入实际用户仪表板指数作品

@{ 
    ViewBag.Title = "Your Dashboard"; 
    Layout = "~/Views/Shared/UserDashboard/_Layout_Dashboard.cshtml"; 
} 
<!-- Content Wrapper. Contains page content --> 
<div class="content-wrapper"> 

载入实际局部模板是服务器说NO NO,你不正确的事情了。

This Snapshot Is The _Layout

这里是确切的服务器错误,请告诉我用正确的方法来实现这一点。

Server Error in '/' Application. 
The partial view '~/Views/Shared/UserDashboard/_PartialHeader_Dashboard' was not found or no view engine supports the searched locations. The following locations were searched: 
~/Views/Shared/UserDashboard/_PartialHeader_Dashboard 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: The partial view '~/Views/Shared/UserDashboard/_PartialHeader_Dashboard' was not found or no view engine supports the searched locations. The following locations were searched: 
~/Views/Shared/UserDashboard/_PartialHeader_Dashboard 

Source Error: 


Line 26: <script src="http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>*@ 
Line 27: <body> 
Line 28:  @Html.Partial("~/Views/Shared/UserDashboard/_PartialHeader_Dashboard") 
Line 29:  @Html.Partial("~/Views/Shared/UserDashboard/_PartialLeftNav_Dashboard") 
Line 30:  @RenderBody() 


Source File: D:\Users\Erik\Documents\visual studio 2017\Projects\BuilderBits\BuilderBits\Views\Shared\UserDashboard\_Layout_Dashboard.cshtml Line: 28 

Stack Trace: 


[InvalidOperationException: The partial view '~/Views/Shared/UserDashboard/_PartialHeader_Dashboard' was not found or no view engine supports the searched locations. The following locations were searched: 
~/Views/Shared/UserDashboard/_PartialHeader_Dashboard] 
    System.Web.Mvc.HtmlHelper.FindPartialView(ViewContext viewContext, String partialViewName, ViewEngineCollection viewEngineCollection) +327 
    System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection) +264 
    System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData) +91 
    System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName) +32 
    ASP._Page_Views_Shared_UserDashboard__Layout_Dashboard_cshtml.Execute() in D:\Users\Erik\Documents\visual studio 2017\Projects\BuilderBits\BuilderBits\Views\Shared\UserDashboard\_Layout_Dashboard.cshtml:28 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197 
    System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +105 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +90 
    System.Web.WebPages.<>c__DisplayClass3.<RenderPageCore>b__2(TextWriter writer) +232 
    System.Web.WebPages.HelperResult.WriteTo(TextWriter writer) +10 
    System.Web.WebPages.WebPageBase.Write(HelperResult result) +80 
    System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body) +63 
    System.Web.WebPages.WebPageBase.PopContext() +237 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +98 
    System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +235 
    System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +107 
    System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +291 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +56 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +420 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +52 
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +173 
    System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36 
    System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9765045 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 

回答

3

当试图包括使用@Html.Partial("_PartialHeader_Dashboard")的局部视图,MVC框架将尝试加载从下面的位置具体根据MVC约定的局部视图。

  1. ~/Views/DirectoryWithYourCurrentControllerName/
  2. ~/Views/Shared/

框架不知道你的部分观点是子目录里面,除非你告诉框架通过扩展视图引擎并指定视图文件的位置(这样做ViewLocationFormats)。所有你需要做的就是添加你的自定义位置。

您有2个选项

呼叫与目录名的局部视图(这是shared下)

@Html.Partial("UserDashboard/_PartialHeader_Dashboard") 

或者

使用完整的文件路径

@Html.Partial("~/Views/Shared/UserDashboard/_PartialHeader_Dashboard.cshtml") 

但是更好选项是考虑Areas。区域是逻辑上保持东西(控制器/视图等)在一起。

+0

非常感谢你的帮助,你能给我一个解释这些区域的链接吗? –

+0

链接已经在答案的最后一句:) – Shyju