请问一下,请问我为什么使用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)上,值是相同的,但是如果您单击“提交”按钮触发发布,则每个输入中呈现的值是否不同?
答案 0 :(得分:0)
我已标记为重复。我找到了问题的答案#39666056。 asp-for属性使用ModelState词典呈现值,而不是传递给视图的Model呈现值。可以通过在返回页面视图之前调用ModelState.Clear()来解决此问题。