ASP.NET Core NullReferenceException при простом доступе к модели - PullRequest
0 голосов
/ 25 августа 2018

У меня проблемы с попыткой создать представление со строго типизированной моделью. Независимо от того, что я передаю в качестве модели View(), я всегда получаю NullReferenceException, даже когда просто обращаюсь к Model.

Я не могу даже проверить, является ли модель нулевой, прежде чем выполнять остальную часть страницы бритвы; простое выполнение 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 ()
AspNetCore.Encoder_MVC_EncodeProgress.ExecuteAsync () в EncodeProgress.cshtml
модуль var = модель;

Что я делаю не так? Я попытался несколько исправлений и обходных путей (используя ViewComponent вместо представления), но ничего не работает.

Некоторые похожие вопросы, которые я нашел, которые не решили мою проблему:

Пустая ошибка модели ядра ASP.NET в представлении индекса

Я уже передаю модель, поэтому этот ответ ничего не меняет в том, что я делаю. Например, когда я пытался использовать контроллер в качестве обходного пути, то же самое NullReferenceException произошло с этим кодом:

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

1 Ответ

0 голосов
/ 25 августа 2018

Я думаю, что вы смешиваете Razor Pages с ASP.NET MVC.Попробуйте удалить директиву @page, и ваша модель должна быть привязана к значению, переданному при вызове return View().

...