首页 > 解决方案 > RazorPages (Core3.1) 如何使用带有 HTML 输入的 asp-for?

问题描述

为什么在回发期间使用 asp-for 时,asp-for 不使用服务器端更改填充输入值?

如果我在没有明确设置 input[value] 属性的情况下使用 asp-for,我的用户输入数据将被保留,但我的服务器端更改将被忽略。相反,如果我明确设置 input[value] 属性,我的用户输入数据将被保留,并且在往返过程中任何服务器端更改都会得到尊重。

重现步骤

初始页面加载

在此处输入图像描述

用户输入然后单击“什么?”

在此处输入图像描述

PostBack 的输出

在此处输入图像描述

示例代码

@page
@model IndexModel
@{
  ViewData["Title"] = "Home page";
}

<div class="text-center">
  <h1 class="display-4">Welcome</h1>
  <p>
    Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.
  </p>
  <div class="row">
    <div class="col-6 mx-auto">
      <form method="post">
        <div asp-validation-summary="All"></div>
        <div class="form-group">
          <input class="form-control" asp-for="NameWithoutValue" />
        </div>
        <div class="form-group">
          <input class="form-control" asp-for="NameWithValue" value="@Model.NameWithValue" />
        </div>
        <button class="btn btn-primary" asp-page-handler="WhatThe">What the?</button>
      </form>
    </div>
  </div>
</div>
public class IndexModel : PageModel
{
    public void OnGet()
    {
    }

    public void OnPostWhatThe()
    {
        NameWithoutValue = DateTime.Now.ToString("HH:mm:ss");
        NameWithValue = DateTime.Now.ToString("HH:mm:ss");
    }

    [BindProperty]
    public string NameWithoutValue { get; set; } = "without-value-attribute";

    [BindProperty]
    public string NameWithValue { get; set; } = "with-value-attribute";
}

标签: c#asp.net-corerazor-pages

解决方案


推荐阅读