为啥此模型绑定在 Razor 页面中不起作用

Posted

技术标签:

【中文标题】为啥此模型绑定在 Razor 页面中不起作用【英文标题】:Why this Model Binding not working in Razor Page为什么此模型绑定在 Razor 页面中不起作用 【发布时间】:2022-01-11 08:06:17 【问题描述】:

我正在使用带有简单示例的 ASP.NET Core 3.1 来测试模型绑定以发布表单。要绑定的属性是一个名为“Student”的对象。 Bud 模型绑定不适用于 post 方法。我将不胜感激任何帮助指出这里有什么问题。

这是我的测试程序的代码:

'学生班':

namespace ModelBindPost.Models

    public class Student
    
        public int Id;
        public string FirstName;
        public string LastName;

    

'Edit.cshtml.cs'

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using ModelBindPost.Models;

命名空间 ModelBindPost.Pages 公共类 EditModel : PageModel [BindProperty(SupportsGet = true)] 公共学生学生得到;放;

    public EditModel()
    
        Student = new Student();
    

    public IActionResult OnGet()
    
        Student.Id = 1;
        Student.FirstName = "Jean";
        Student.LastName = "Smith";
        return Page();
    
    public IActionResult OnPost()
    
        string name = this.Student.FirstName;
        return Page();
    



'Edit.cshtml':

@page
@model ModelBindPost.Pages.EditModel
@


<h2>Model Binding Test</h2>

<form method="post">
<div class="form-group">
    <lable asp-for="Student.Id"></lable>
    <input asp-for="Student.Id" class="form-control" />
</div>
<div class="form-group">
    <lable asp-for="Student.FirstName"></lable>
    <input asp-for="Student.FirstName" class="form-control" />
</div>
<div class="form-group">
    <lable asp-for="Student.LastName"></lable>
    <input asp-for="Student.LastName" class="form-control" />
</div>
<button type="submit" class="btn btn-primary">Save</button>
</form>

【问题讨论】:

【参考方案1】:

简单的公共字段不能用于模型绑定。您需要添加 getter 和 setter 来创建如下属性:

public class Student

    public int Id  get; set; 
    public string FirstName  get; set; 
    public string LastName  get; set; 


【讨论】:

它解决了这个问题。非常感谢您的帮助!!! 嗨@bedrock,如果我的回答可以帮助您解决问题,您能接受吗?参考:How to accept as answer。谢谢。 答案已被接受。

以上是关于为啥此模型绑定在 Razor 页面中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

显式 Razor 表达式在 @foreach 输出模型属性中不起作用并与文本连接

ASP.NET MVC Razor Url.Action 在 Internet Explorer 8 中不起作用

为啥页面重定向在 php 中不起作用

为啥 button.click() 在我的脚本中不起作用?

自动完成在 Visual Studio Code 中的 ASP.NET Core 5 Razor Tag Helper 中不起作用

为啥在 laravel 的 whereBetween 中不起作用