Требуется ли связывание модели Razor Pages [BindProperty]? - PullRequest
0 голосов
/ 15 января 2019

В моем файле .cs есть следующий код:

[BindProperty]
public ApimSubscriptionRoot apimSubscriptions { get; set; }

... который позволяет мне получить доступ к свойствам объекта в моем представлении Razor как:

@Model.apimSubscriptions.someProperty

... однако определение его как поля также работает с точки зрения того, что я могу отображать свойства объекта в моем представлении:

public ApimSubscriptionRoot apimSubscriptions;

Код бритвы позади (контроллер):

public async Task<IActionResult> OnGet() 
{
    (some code...)
    apimSubscriptions = JsonConvert.DeserializeObject<ApimSubscriptionRoot>(contents);
    return Page();
}

Страница бритвы (просмотр):

@page
@model Subscriptions

@{
    ViewData["Title"] = "Your subscriptions";
    ViewData["ActivePage"] = ManageNavPages.Subscriptions;
}

<h4>@ViewData["Title"]</h4>

<div class="row">
    <div class="col-md-12">
        @if (Model.apimSubscriptions.value.Length == 0 || Model.apimSubscriptions == null)

Любое объяснение того, почему это будет оценено.

1 Ответ

0 голосов
/ 12 апреля 2019

Немного старый вопрос, но он все равно идет: BindPropertyAttribute позволяет получить доступ к значениям, введенным в представлении в методе OnPost, т.е. привязка в этом случае означает привязку к виду. Все получатели и поля общедоступных свойств в классе модели доступны в представлении, поскольку они считаются только экземплярами объекта, которые используются кодом Razor.

BindPropertyAttribute требуется, поскольку при отправке формы создается новый объект модели и вызывается OnPost, а затем атрибут направляет страницу Razor для установки соответствующих значений из формы в соответствующее свойство.

...