web-dev-qa-db-fra.com

ASP.NET Core NullReferenceException lors de l'accès au modèle

J'ai du mal à essayer de créer une vue avec un modèle fortement typé. Peu importe ce que je transmets en tant que modèle à une View(), je reçois toujours un NullReferenceException même lorsque j'accède simplement à la Model.

Je ne peux même pas vérifier si le modèle est nul avant d'exécuter le reste de la page du rasoir; faire simplement une if (Model != null) lance également la même 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();
    }

Trace de pile d'exception:

NullReferenceException: référence d'objet non définie sur une instance d'un objet.

AspNetCore.Encoder_MVC_EncodeProgress.get_Model ()
AspNetCore.Encoder_MVC_EncodeProgress.ExecuteAsync () dans EncodeProgress.cshtml
module var = Modèle;

Qu'est-ce que je fais mal? J'ai essayé plusieurs correctifs et solutions (en utilisant un ViewComponent au lieu d'une vue) mais rien ne fonctionne.

Quelques questions similaires que j'ai trouvées qui n'ont pas résolu mon problème:

Erreur nulle du modèle ASP.NET Core dans la vue Index

Je passe déjà le modèle, donc cette réponse ne change rien à ce que je fais. Par exemple, lorsque j'essayais d'utiliser un contrôleur comme solution de contournement, le même NullReferenceException s'est produit avec ce code:

    [Route("/encode/progress")]
    public IActionResult GetProgress()
    {
        return View("~/Encoder/MVC/EncodeProgress.cshtml", new EncoderModule());
    }
7
user5860357

Je pense que vous mélangez Razor Pages avec ASP.NET MVC. Essayez de supprimer la directive @page Et votre modèle doit être lié à la valeur transmise lorsque vous appelez return View().

10
Justin Helgerson