【问题标题】:Razor Pages model value discrepancy after OnPost modifcation [duplicate]OnPost 修改后的 Razor Pages 模型值差异 [重复]
【发布时间】:2019-02-26 02:31:09
【问题描述】:

请帮助我理解为什么在使用 TagHelper 与标准输入元素时页面显示“MyProperty”的过时值?

正在 Razor 页面的 OnPost 方法中修改该值。在 OnPost 之后,TagHelper 输入显示的是在帖子中发送的值,但非标记帮助器输入显示的是实际的最新值。

示例页面模型:-

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace WebApplication1.Pages.Test
{
    public class TestModel : PageModel
    {
        [BindProperty]
        public string MyProperty { get; set; } = null;

        public void OnGet()
        {
            MyProperty = "Default value";
        }

        public PageResult OnPost()
        {
            MyProperty = "Posted value overwritten by some logic";

            return Page();
        }

    }
}

示例剃须刀页面:-

@page
@model WebApplication1.Pages.Test.TestModel

<form asp-antiforgery="true">

    <p><input value="@Model.MyProperty" readonly /></p>
    <p><input asp-for="MyProperty" /></p>

    <button type="submit">Post data</button>

</form>

在初始页面加载 (OnGet) 时,值是相同的,但如果您点击提交按钮来触发帖子,则每个输入中呈现的值不同?

【问题讨论】:

    标签: c# asp.net razor asp.net-core asp.net-core-2.1


    【解决方案1】:

    我已标记为重复。我在ASP.NET Core: asp-* attributes use request payload over model? 中找到了答案。 asp-for 属性使用 ModelState 字典来呈现值,而不是传递给视图的 Model。这可以通过在返回页面视图之前调用 ModelState.Clear() 来解决。

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 2020-11-18
      • 1970-01-01
      • 2022-01-06
      • 2018-07-16
      • 2018-11-07
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多