2017-04-08 56 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