RazorPages: модель не создается в Partial с моделью страницы - PullRequest
0 голосов
/ 04 июля 2018

Я тестирую RazorPages и .Net Core 2.1

Я только что взял новый шаблон проекта и создал Partial. Это релевантное / добавленное содержимое файлов.

Моя проблема

1) Непосредственная проблема: частично: OnGetAsync (ни public void OnGet ()) не вызывается. и я получаю исключение NullReference при просмотре модели в строке

@foreach (var item in Model.ImageBE) {

Я пытался отключить DB-вызов и явно вызвать OnGet из конструктора, но без разницы.

2) Я не могу найти пример, где страница (индекс) имеет экземпляр модели Partials (ImageGalleryModel ниже). но это единственное, что компилятор примет. Я делаю это совершенно неправильно?

Index.cshtml (страница)

...
[partial name="_ImageGallery" model="Model.ImageGallery" /]
...

Index.cshtml.cs

public class IndexModel : PageModel
    {
        ApplicationDbContext mContext;
        public ImageGalleryModel ImageGallery;

        public IndexModel(ApplicationDbContext context)
        {
            mContext = context;
            ImageGallery = new ImageGalleryModel(mContext);
        }

        public void OnGet()
        {

        }
    }

_ImageGallery.cshtml (частично)

[table class="table"]
    @foreach (var item in Model.ImageBE) {
              ...

_ImageGallery.cshtml.cs

public class ImageGalleryModel : PageModel
    {
        private readonly ApplicationDbContext _context;
        public IList<ImageBE> ImageBE { get; set; }

        public ImageGalleryModel(Photiqo.Data.ApplicationDbContext context)
        {
            _context = context;
        }

        public async Task OnGetAsync()
        {
            ImageBE = await _context.ImageBE.ToListAsync();
        }
    }

1 Ответ

0 голосов
/ 05 июля 2018

Partials не должен иметь связанный с ними файл PageModel. Если у вас есть код C #, который вы хотите выполнить, вам следует рассмотреть возможность создания ViewComponent .

Кроме того, вы можете переместить свойство public IList<ImageBE> ImageBE в IndexModel и создать его экземпляр в методе OnGetAsync. Затем вы можете указать тип модели для партиала и передать его партиалу с помощью помощника по тегам, как вы это делаете в настоящее время:

_ImageGallery.cshtml (частично)

@model IList<ImageBE>

<table class="table">
    @foreach (var item in Model) {
    ...
...