Передача модели из Index в _Layout в _Header в ASP.NET Core вызывает исключение NullReferenceException в get_Model().C#

Место общения программистов C#
Ответить
Anonymous
 Передача модели из Index в _Layout в _Header в ASP.NET Core вызывает исключение NullReferenceException в get_Model().

Сообщение Anonymous »

У меня есть проект ASP.NET Core 8.0, использующий страницы Razor. Когда я посещаю http://localhost:5###/ и ViewData["_Header"] используется для передачи данных со страницы Index в _Layout на страницу _Header, страница _Header выдает исключение NullReferenceException в get_Model().

Код: Выделить всё

Index.cshtml:
@page
@{
Layout = "_Layout";
ViewData["_Header"] = new DemoForStackOverflow.Pages.Shared.Header() {IsArriving = true};
}
some content

Код: Выделить всё

_Layout.cshtml:



Demo for Stack Overflow



@await Html.PartialAsync("_Header", ViewData["_Header"])

Appears on every page below header and above body

@RenderBody()



Код: Выделить всё

_Header.cshtml:
@page
@model DemoForStackOverflow.Pages.Shared.Header

@if (Model.IsArriving)
{
Hello
}
else
{
Goodbye
}

Код: Выделить всё

_Header.csthml.cs:
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace DemoForStackOverflow.Pages.Shared;

public class Header : PageModel
{
public bool IsArriving { get; set; }
}
Вот полное сообщение об исключении и трассировка стека:

Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]< /p>
Во время выполнения запроса произошло необработанное исключение.
System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.
в AspNetCoreGeneratedDocument.Pages_Shared__Header.get_Model()

в AspNetCoreGeneratedDocument.Pages_Shared__Header.ExecuteAsync() в /home/RF/DemoForStackOverflow/Pages/Shared/_Header.cshtml:строка 4
в Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(страница IRazorPage, контекст ViewContext)

в Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(страница IRazorPage, Контекст ViewContext, логическое значение вызоваViewStarts)

в Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync (контекст ViewContext)
в Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RenderPartialCoreAsync(String partsialViewName, Объектная модель, ViewDataDictionary viewData, модуль записи TextWriter)
в Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.PartialAsync(String partialViewName, Объектная модель, ViewDataDictionary viewData)
в AspNetCoreGeneratedDocument.Pages_Shared__Layout.b__8_1() в /home /RF/DemoForStackOverflow/Pages/Shared/_Layout.cshtml: строка 8
в Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperExecutionContext.SetOutputContentAsync()
в AspNetCoreGeneratedDocument.Pages_Shared__Layout.ExecuteAsync()
at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(страница IRazorPage, контекст ViewContext)
at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync (страница IRazorPage, контекст ViewContext, логическое значение ignoreViewStarts)
в Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderLayoutAsync(контекст ViewContext, ViewBufferTextWriter bodyWriter)
в Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(контекст ViewContext)
в Microsoft.AspNetCore.Mvc. ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, String contentType, Nullable

Код: Выделить всё

1 statusCode) at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, String contentType, Nullable
1 statusCode)
в Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|30_0[TFilter,TFilterAsync](вызов ResourceInvoker, задача LastTask, состояние следующее, область области, состояние объекта, логическое значение isCompleted) в Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
в Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope&scope, Object&state, Boolean& isCompleted)
в Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters()
--- Конец трассировки стека из предыдущего местоположения ---
в Microsoft.AspNetCore.Mvc.Infrastructure .ResourceInvoker.g__Awaited|25_0(вызов ResourceInvoker, задача LastTask, состояние следующее, область области, состояние объекта, логическое значение isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(контекст ResourceExecutedContextSealed)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope&scope, Object&state, Boolean& isCompleted)
в Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
--- End трассировки стека из предыдущего местоположения ---
в Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(вызов ResourceInvoker, задача Task, область IDisposable)
в Microsoft.AspNetCore.Mvc.Infrastructure. ResourceInvoker.g__Awaited|17_0(вызов ResourceInvoker, задача Task, область IDisposable)
в Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(контекст HttpContext)
в Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(контекст HttpContext) )
в Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

Почему модель заголовка имеет нулевое значение? Есть ли лучший способ передать данные из Index в _Header с помощью _Layout?
Я пробовал добавлять операторы отладки. Похоже, что ViewData["_Header"] работает, но где-то после Html.PartialAsync("_Header", ViewData["_Header"]) значение модели становится нулевым.

Подробнее здесь: https://stackoverflow.com/questions/790 ... nullrefere
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»