web-dev-qa-db-ja.com

モデルにアクセスするだけの場合のASP.NET Core NullReferenceException

厳密に型指定されたモデルでビューを作成しようとすると問題が発生します。 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());
    }
7
user5860357

Razor Pages とASP.NET MVCが混在していると思います。 _@page_ディレクティブを削除してみてください。モデルはreturn View()を呼び出したときに渡された値にバインドされます。

10