厳密に型指定されたモデルでビューを作成しようとすると問題が発生します。 View()
にモデルとして渡したものに関係なく、NullReferenceException
にアクセスするだけでも、常にModel
を受け取ります。
かみそりページの残りの部分を実行する前に、モデルがnullかどうかを確認することさえできません。単にif (Model != null)
を実行しても、同じNullReferenceException
がスローされます。
Index.cshtml
@page
@model EncodeModel
@{
Layout = "~/Pages/Shared/_Layout.cshtml";
}
<h2>Encode</h2>
<div id="progress">
@await Html.PartialAsync("~/Encoder/MVC/EncodeProgress.cshtml", new EncodeModule())
</div>
EncodeProgress.cshtml
@page
@model FFenc.IEncoderModule
@{
var module = Model; //this throws the NullReferenceException
}
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
}
例外スタックトレース:
NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。
AspNetCore.Encoder_MVC_EncodeProgress.get_Model()
EncodeProgress.cshtmlのAspNetCore.Encoder_MVC_EncodeProgress.ExecuteAsync()
var module = Model;
私は何を間違えていますか?複数の修正と回避策(ビューの代わりにViewComponentを使用)を試みましたが、何も機能しません。
私が見つけた、私の問題を解決していないいくつかの同様の質問:
インデックスビューでのASP.NET Core Model nullエラー
私はすでにモデルを渡しているので、この答えは私がやっていることについて何も変えません。たとえば、回避策としてコントローラーを使用しようとしたときに、このコードでも同じNullReferenceException
が発生しました。
[Route("/encode/progress")]
public IActionResult GetProgress()
{
return View("~/Encoder/MVC/EncodeProgress.cshtml", new EncoderModule());
}
Razor Pages とASP.NET MVCが混在していると思います。 _@page
_ディレクティブを削除してみてください。モデルはreturn View()
を呼び出したときに渡された値にバインドされます。