为了账号安全,请及时绑定邮箱和手机立即绑定

了解 Razor 数据持久性

了解 Razor 数据持久性

呼如林 2023-10-04 15:41:10
我目前正在学习剃刀页面,我被这个问题困住了:我有一个自定义类,其中包含一组成员,其中包括其他自定义类的数组。一旦页面开始,它们就会启动。之后,用户可以更改值或添加或删除数组行。然而,一旦用户确认更改,OnPost 就会抛出异常,就好像数组从未启动过一样。解决这个问题的最佳方法是什么?代码示例:   [BindProperty(SupportsGet = true)]    public long UID { get; set; }    [BindProperty(SupportsGet = true)]    public int UDEP { get; set; }    [BindProperty]    public int nExpenses { get; set; }    // Custom object    [BindProperty]    public Employee Employee { get; set; }    public void OnGet()    {        Employee = new Employee(UID, UDEP);        // Loading arrays data from a Database        Employee = Employee.ExtractPersonalData(UID);        Employee.Expenses.ExtractSheet(Month, Year, Employee.ID);        Employee.Expenses.ExtractBoard();        Employee.Expenses.ExtractProjects(Month, Employee.ID);            // There are 1 boards and 4 projects with 30 decimal[] each        nExpenses = Employee.Expenses.Boards.Count > 0 ? Employee.Expenses.Boards[0].Projects.Count : 0;    }    public IActionResult OnPost()    {        // All variables within Employee equal NULL        if(nExpenses < Employee.Expenses.Boards[0].Projects.Count)            DeleteRow();        else if (nExpenses > Employee.Expenses.Boards[0].Projects.Count)            AddRows();        Employee.Expenses.SaveSheet();    }
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

您应该将 OnGet 方法传递的数据保留在视图中(如hidden controls),然后将它们传递给 OnPost 方法,而 OnPost 方法需要receive parameter从视图中获取 OnGet 方法中的数据。


我创建了一个简单的演示供您参考:


  [BindProperty]

    public Employee Employee { get; set; }


    public void OnGet()

    {

        Employee = new Employee()

        {

            Id = 1,

            Name = "aaaa"

        };

        nExpenses = 1;

    }



    public void OnPost(Employee employee)

    {

    }

看法:


@page

@model WebApplication_core_razorpage.Pages.CodeSampleModel

@*

    For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860

*@

<form method="post">

    @Html.HiddenFor(model => model.Employee.Id)

    @Html.HiddenFor(model => model.Employee.Name)

    <input id="Button1" type="submit" value="button" />

</form>

员工类别:


public class Employee

    {

        public int Id { get; set; }

        public string Name { get; set; }

    }


查看完整回答
反对 回复 2023-10-04
  • 1 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信