Частичное представление бритвенных страниц: модель не определена - PullRequest
0 голосов
/ 03 января 2019

TLDR: проблема в том, что я вижу следующую ошибку при попытке получить идентификатор из модели (строка 8 приведенного ниже кода):

System.NullReferenceException: для ссылки на объект не задано значениеэкземпляр объекта.

Подробности:

Я хотел сделать часть моего HTML многократного использования.Существует большой раздел, называемый «InfoBox», который содержит некоторую информацию, которая размещена в нескольких местах на моем веб-сайте.Я решил создать Partial Razor Page.Вот как я это сделал:

_TextBoxInfoPartial.cshtml.cs:

public class _TextBoxInfoPartialModel : PageModel
{
    [BindProperty]
    public string ID { get; set; }

    public IActionResult OnGet()
    {
        ID = ""; //default

        return Page();
    }
}

_TextBoxInfoPartial.cshtml:

@page
@model Definicje.Pages.Shared._TextBoxInfoPartialModel

<button type="button" class="visibility-toggler" visibility-toggler="#hint-math@(Model.ID)">Wstaw wzór</button>
<div id="hint-math@(Model.ID)" class="hintbox">
    some text
</div>

Чтобы поместить частичное в другой файл cshtml, я использую этострока:

@await Html.PartialAsync("_TextBoxInfoPartial", new _TextBoxInfoPartialModel { ID = g.ID + "" })

Я не понимаю.Я указываю Модель для Частичного, почему тогда она не определена?

1 Ответ

0 голосов
/ 04 января 2019

Для частичного просмотра: удалите директиву @page.

@model Definicje.Pages.Shared._TextBoxInfoPartialModel

<button type="button" class="visibility-toggler" 
                  visibility-toggler="#hint-math@(Model.ID)">Wstaw wzór</button>
<div id="hint-math@(Model.ID)" class="hintbox">
    some text
</div>

Теперь Model будет _TextBoxInfoPartialModel объектом, который вы передаете из другого представления.

Когдавы добавляете директиву @page к файлу вида, он начинает вести себя по-другому, больше похоже на метод действия - вы можете получить к нему доступ через http-запрос.

Другое наблюдение, если имя вашего файла начинается с *Префикс 1012 *, упомянутая выше возможность маршрутизации не будет работать.Он не может быть напрямую доступен по запросу Http.

Так что для частичного просмотра не используйте директиву @page

...