asp.net - ASP.Net 核心 Blazor 数据绑定中断
问题描述
在过去的 2 天里,不知何故,我与模型的数据绑定在用于“添加新”和“更新”数据库记录的页面上损坏了。我有以下代码 - 为了查看目的,我将其最小化。
@page "/NewRepairOrder"
@using ShopLiveWebVersion2._0.Models
@using ShopLiveWebVersion2._0.DataAccess
@using ShopLiveWebVersion2._0.Services
@using ShopLiveWebVersion2._0.Data
@inject IUriHelper UriHelper
@inject RepairOrderContext context
<div class="container">
@if (RO == null)
{
<div class="row">
<div class="col-lg-6 float-right">
<h2>Loading....</h2>
</div>
</div>
}
else
{
<div class="row">
<div class="col-lg-1"></div>
<div class="col-lg-10">
<h2>Add New Repair Order</h2>
<h4>@ErrorMessage</h4>
</div>
</div>
<div class="row">
<div class="col-lg-1"></div>
<div class="col-lg-2">
<label for="ControlNumber" class="Control-label">Repair Order #:"</label>
<input for="ControlNumber" class="form-control" bind="@RO.ControlNumber" maxlength="15" required />
</div>
页面的 HTML 继续包含其他输入和选择框。下面是整个 Functions 代码块。
@functions
{
private OptionsDataAccess OpsData;
private RepairOrderDataAccess ROData;
private List<LocationOptions> LocationOps;
private List<EmployeeOptions> EmployeeOps;
private List<StatusOptions> StatusOps;
private RepairOrder RO = new RepairOrder();
private string ErrorMessage;
protected override async Task OnInitAsync()
{
LocationOps = new List<LocationOptions>();
EmployeeOps = new List<EmployeeOptions>();
StatusOps = new List<StatusOptions>();
OpsData = new OptionsDataAccess(context);
ROData = new RepairOrderDataAccess(context);
LocationOps = await Task.Run(() => OpsData.GetAllLocationOptions());
EmployeeOps = await Task.Run(() => OpsData.GetAllEmployeeOptions());
StatusOps = await Task.Run(() => OpsData.GetAllStatusOptions());
}
private void SaveRepairOrder()
{
try
{
ROData.AddRepairOrder(RO);
//UriHelper.NavigateTo("/Home");
}
catch
{
ErrorMessage = "Could not Save the Data -- try again";
}
}
}
我最初有“RO = new RepairOrder();” 在声明位于外部时的 InitAsync() 方法中。投掷吐球我将它作为方法之外的一个衬里包括在内。
当我单击保存按钮时,所有 NULL 值的 RO 都存储在数据库中。
我在页面底部添加了标签元素,绑定到与输入相同的数据,并选择在关闭页面之前查看效果,它们也显示为 NULL。
我还尝试为每个创建单独的字符串项,然后在将 RO 发送到数据库之前执行“RO. = {item};”。
有没有人看到绑定被这样禁用?
解决方案
对此的简单答案是确保您阅读对正在更新的任何内容的更改。最新更新有一些重要的重大变化。吸引我的是数据绑定。
我必须从以下位置更改所有代码:
<div class="col-lg-2">
<label for="ControlNumber" class="Control-label">Repair Order #:"</label>
<input for="ControlNumber" class="form-control" bind="@RO.ControlNumber" maxlength="15" required />
</div>
新的数据绑定方式:
<div class="col-lg-2">
<label for="ControlNumber" class="Control-label">Repair Order #:"</label>
<input for="ControlNumber" class="form-control" @bind="RO.ControlNumber" maxlength="15" required />
</div>
为了将元素绑定到“函数”或“代码”(现在称为)中的方法,您使用稍微不同的格式。
<button class="btn" @onclick="@DoSomthing">Click Me</button>
我会注意到新样式的数据绑定确实杀死了我在对象中的智能感知。智能感知会显示对象名称,但是一旦您点击“输入”或选择对象,智能感知中不会弹出任何内部项目。
我今天重新学到的最重要的一课 - 始终阅读更改文件!
推荐阅读
- css - 如何在 CSS 中应用多个伪类
- c - CMake中的子目录依赖项
- macos - Flutter 项目未在 IOS 模拟器上启动
- jsf - Primefaces p:ajax调用后消息消失
- python - Python在控制台中覆盖行
- sql-server - 如何修复 SQL Server 中的错误 18456、严重性 14、状态 38?
- javascript - 使用 antd column render 显示另一列的百分比
- bash - 如何使用 ffmpeg 在一个视频中随机添加多个音频?
- tensorflow - 使用 Keras ImageDataGenerator 执行 image2image 任务
- python - 在python中分别整合正负区域