需要Razor Pages模型绑定[BindProperty]吗?

时间:2019-01-14 23:28:47

标签: c# razor

.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 :(得分:1)

一个老问题,但是无论如何都可以通过:BindPropertyAttribute来访问通过OnPost方法在视图中输入的值,即。在这种情况下,绑定表示从视图到模型的绑定。视图中可访问模型类中的所有公共属性获取器和字段,因为它们仅被Razor代码使用的对象实例。

BindPropertyAttribute是必需的,因为在提交表单并调用OnPost时会创建一个新的模型对象,然后该属性指示Razor页面将表单中的相应值设置为匹配的值属性。