OnPost修改后的Razor Pages模型值差异

时间:2018-09-21 16:28:51

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

请问一下,请问我为什么使用TagHelper和标准输入元素时页面为何显示“ MyProperty”的过时值?

正在Razor页面的OnPost方法中修改该值。在OnPost之后,TagHelper输入将显示在帖子中发送的值,但非Tag helper输入将显示实际的最新值。

示例页面模型:-

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)上,值是相同的,但是如果您单击“提交”按钮触发发布,则每个输入中呈现的值是否不同?

1 个答案:

答案 0 :(得分:0)

我已标记为重复。我找到了问题的答案#39666056。 asp-for属性使用ModelState词典呈现值,而不是传递给视图的Model呈现值。可以通过在返回页面视图之前调用ModelState.Clear()来解决此问题。