C# Blazor 和数据绑定到 DateTime?

C# Blazor and data binding to a DateTime?

我必须为现有 Asp.net Core 3.1 Blazor 项目的日期和时间输入字段添加数据验证;这是我第一次使用 Blazor。

我在日期输入字段(具有日期选择器和数据绑定到 DateTime 变量)上设置了数据绑定,没有任何问题。但是,时间输入的情况不同(它有一个时间选择器并绑定到另一个 DateTime 变量。)

简而言之,当用户使用时间选择器设置时间并关闭它时,输入字段中的时间将返回到最初设置的时间。例如,如果时间输入当前设置为 12:00 AM,然后用户从时间选择器中选择一个新时间(比如说 2:00 PM),用户单击确定并关闭时间选择器,输入中的时间回到 12:00 AM。我在同一页面上有另一个时间输入,但数据绑定到字符串而不是 DateTime,如果在时间选择器中再次设置时间,时间将被保留。

我写了一个很短的程序来演示这个问题。我的示例页面有三个输入字段:日期、时间和另一个时间,但它的数据绑定到一个字符串。

@page "/"

<h1>Hello, world!</h1>

Welcome to your new app.

<div class="wrapper">
  <section class="createevent">
    <EditForm EditContext="@_editContext" OnValidSubmit="@HandleValidSubmit" OnInvalidSubmit="@HandleInvalidSubmit">
      <DataAnnotationsValidator />
      <div class="form-group">
        <p>
          <label>
            Date:
          </label>
          <input id="txtDate" type="date" required @bind-value="_timeSample.date" />
          <ValidationMessage For="@(() => _timeSample.date)" />
        </p>
      </div>
      <div class="form-group">
        <p>
          <label>
            Time:
          </label>
          <input id="txtTime" type="time" required @bind="_timeSample.time" />
          <ValidationMessage For="@(() => _timeSample.time)" />
        </p>
      </div>
      <div class="form-group">
        <p>
          <label>
            Time2:
          </label>
          <InputText id="txtTime2" type="time" required @bind-Value="_timeSample.text" />
          <ValidationMessage For="@(() => _timeSample.text)" />
        </p>
      </div>
    </EditForm>
  </section>
</div>

@code
{
  public class TimeSample
  {
    public DateTime date { get; set; }
    public DateTime time { get; set; }
    public string text { get; set; }
  };

  private EditContext _editContext;
  private TimeSample _timeSample = new TimeSample();

  protected override void OnInitialized()
  {
    _editContext = new EditContext(_timeSample);
  }

  private void HandleValidSubmit()
  {
  }

  protected void HandleInvalidSubmit()
  {
  }

}

您使用的是什么浏览器?我 运行 你的代码 Chrome,我无法重现这个问题......我认为它与 Blazor 无关,而是与你使用的浏览器有关。请用其他浏览器尝试您的代码

希望这对您有所帮助...