首页 > 解决方案 > 需要 Razor Pages 模型绑定 [BindProperty]?

问题描述

我的 .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)

任何关于为什么的解释将不胜感激。

标签: c#razor

解决方案


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

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


推荐阅读