2017-04-08 3 views
0

すべてのMVC 5が期待どおりに動作する伝統的なWebサイトがあり、すべてが正しくレンダリングされ、正常に動作します。MVC 5でレンダリングするネストされたフォルダを正しく取得する方法C#

ダッシュボードとこのダッシュボードを追加しました。フォルダ構造に設定しようとしています。これは、MVC 5 C#Webサイトの他の部分から隔離されています。しかし、レイアウトエンジンがパーシャルビューを見つけることができないことを示すServer Errorが表示されます。

ビュー自体がロードされてテストに合格し、実際に正しいビューが返されると、レイアウトエンジンがネストされたパーシャルビューを見つけられないときに問題が発生します。

私はMVC 5を完全に理解していないという事実のため、この1つが失われています。

これまで述べたように、すべてのことが完璧に機能しますが、ネストされたフォルダを作成してパーシャルビューを配置すると、MVC 5エンジンはこれらのネストされたパーシャルビューを見つけることができません。

これらの部分的なビューを入れ子にする理由は明らかです。私は実際の伝統的なWebサイトをユーザーダッシュボードビューから分離しています。

インデックスファイルを指すアクションリンクをクリックすると、これは機能しますが、ボディ、ビュー、レンダリングしようとすると、ネストされた部分ビューが見つかりません。

私はここで何が欠けていますか?私は、この質問にできるだけ簡単に答えさせるための十分な情報を提供したいと思っています。実際のユーザのダッシュボード指数は実際のパーシャルをロード

@{ 
    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

関連する問題