【问题标题】:Razor Pages: Persistent Model Data after second Post buttonRazor Pages:第二个发布按钮后的持久模型数据
【发布时间】:2021-04-07 11:52:03
【问题描述】:

我是 Razor Pages 的新手;我有一个员工数据页面(EmpId、EmpName、Leave Balance),带有一个计算休假余额的按钮,并将值设置为属性(Leave Balance)。计算完假期余额后,用户必须在最终提交给他的经理之前向他的电子邮件发送验证码。不幸的是,在第二个提交按钮事件中,并且在回发整个页面后,emp 对象变为 null!。以下代码是我的代码的说明(不是实际代码):

public class Index2Model : PageModel
{
    [BindProperty]
    public Employee Emp { get; set; }
    public IActionResult OnGet()
    {
        if (Emp ==null)
            Emp = new Employee {EmpId=1,EmpName="Youssef", };

        return Page();
    }

    public IActionResult OnPostSubmit1()
    {
        //Code to calculate the employee leave balance
        Emp.LeaveBalance = 30;
        return Page();
    }
    public IActionResult OnPostSubmit2()
    {
        //After calling the Submit button, Emp object is null
        return Page();
    }
}

这是 HTML 代码:

@page
@model DIWEB.Pages.Index2Model
@{
}
<div>
    <form method="post">
        @Html.DisplayNameFor(model => model.Emp.EmpName)
        @Html.DisplayFor(model => model.Emp.EmpName)
        <br />
        @Html.DisplayNameFor(model => model.Emp.LeaveBalance)
        @Html.DisplayFor(model => model.Emp.LeaveBalance)
        <br />
        <input type="submit" value="Submit1" asp-page-handler="Submit1" />
        <br />
        <input type="submit" value="Submit2" asp-page-handler="Submit2" />
    </form>

</div>

请给点建议。

【问题讨论】:

    标签: asp.net-core post razor-pages


    【解决方案1】:

    表单不会提交显示文本,您可以为每个属性设置隐藏输入:

    <form method="post">
        <input type="hidden" asp-for="Emp.EmpId" />
    
        @Html.DisplayNameFor(model => model.Emp.EmpName)
        @Html.DisplayFor(model => model.Emp.EmpName)
        <input type="hidden" asp-for="Emp.EmpName" />
        <br />
    
        @Html.DisplayNameFor(model => model.Emp.LeaveBalance)
        @Html.DisplayFor(model => model.Emp.LeaveBalance)
        <input type="hidden" asp-for="Emp.LeaveBalance" />
        <br />
    
        <input type="submit" value="Submit1" asp-page-handler="Submit1" />
        <br />
        <input type="submit" value="Submit2" asp-page-handler="Submit2" />
    </form>
    

    【讨论】:

    • 感谢您的回复,但附加的示例使用隐藏字段很容易处理,但我拥有的对象的真实场景除了包含许多属性(不同数据类型)之外另一个类对象的列表,这使我的对象复杂地存储在隐藏字段中
    • 好的,在实际场景中,您可能只需要将唯一id发送到后端即可获取记录并对其进行修改。由于http是无状态的,需要将修改后的emp重新赋值给Emp,然后页面才能获取到数据。
    • 我同意,这是我使用的临时解决方案,我试图避免对后端 Web API 进行多次不必要的调用,但似乎我必须这样做。再次感谢您的回复。
    • 嗨@YoussefSalame,如果我的回复有帮助,请mark it as answer,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-04-10
    • 2012-05-30
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2018-06-29
    • 2018-06-19
    相关资源
    最近更新 更多