前回の質問後に、進展がありましたので、再度質問させて頂きます。
.NET8 MVC で、C#を使用しています。
クラスライブラリのプロジェクトでWebサイトに追加するPage01ページController、Model、Viewを作成しましたが、ControllerとModelは正しく機能するのですが、どうしてもViewだけが見つからないと言うエラーになってしまします。 そのような指定やコーディングを行えば、Viewは正しく機能してPage01は
表示できるようになるのでしょうか?
Page01.dllを参照するMVCサイトのプロジェクトは、
WebSampleと言う名で作成しています。
Page01.dllを作成するPage01と言うプロジェクトは、
/Controllers/Page01Controller.cs
/Model/Page01Models.cs
/View/Page01/index.cshtml
と言う3つのファイルで構成されています。
Page01Controller.csでは、
namespace Page01.Controllers { public class Page01Controller : Controller { public IActionResult Index() { Page01VM model = new(); return View(model); } } }
と言うコーディングをしています。
Viewで /View/Page01/index.cshtml を指定しても
Viewで指定を誤った時に表示される一般的な存在しない的なエラーが発生します。
2024/03/19 16時頃下記追加
いろいろなご回答ありがとうございます。 色々なご質問に関してご回答します。 本件は、.NET8 MVCでサイト構築を行っておりますが、作成するサイトのページ数軽く見積もっても100ページ以上のサイトであり、複数名での同時開発や開発時のデバック、初回リリース後に影響範囲と導入範囲を最小限にした修正導入等を考えたい点があります。そのため色々と調べて前回のご質問をさせていただきましたが、そもそも「.NET8 MVCには、DLLを参照登録するだけでコントローラーなどが簡単に追加される機能があると言う事がわかりました。」そこで、回答が無い点がありましたので、ご質問を今回のご質問に変更させて頂きました。 こちらのご質問の方が、.NET8 MVCではDLLからコントローラーなどを簡単に追加できる仕組みがある関係から問題可決に繋がりやすく、少しでも先に進めると考えております。
http://サイト/Page01 のURLにアクセスした時、DLLのコントローラーに処理が入り、Viewまで処理は進み、その後下記エラーが発生します。Page01用DLLのクラスライブラリのプロジェクト構成とコントローラーのソースは本件で質問させて頂いた通りとなります。
`An unhandled exception occurred while processing the request. InvalidOperationException: The view 'Index' was not found. The following locations were searched: /Views/Page01/Index.cshtml /Views/Shared/Index.cshtml
Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable<string> originalLocations)
InvalidOperationException: The view 'Index' was not found. The following locations were searched: /Views/Page01/Index.cshtml /Views/Shared/Index.cshtml
Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable<string> originalLocations)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result)
Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|30_0<TFilter, TFilterAsync>(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext<TFilter, TFilterAsync>(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters()
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)
本件の問題が解決できた後、サイトのprogram.csでサイト起動時に動的に特定ディレクトリに存在するDLLを登録させる方法の検討に進もうと考えております。