c# - 向数据库添加条目后 Blazor 组件不刷新
问题描述
我正在开发简单的应用程序来管理 Blazor 服务器端的酒店预订,使用 EF Core 作为数据库。我有一个酒店房间的添加表单,在同一页面上,我显示了所有房间的列表,我目前面临一个问题,当我添加一个新房间时,组件本身没有刷新我必须点击F5 到所以我的列表再次填充。我在 youtube 上找到了这个视频,他正在做类似的事情,并且对他有用。我还尝试将 StateHasChanged 放入我的页面代码中,但没有任何反应。
继承人页面代码:
@page "/rooms"
@using HotelServiceSystem.Interfaces.Services
@using HotelServiceSystem.Entities
@inject IRoomService roomService
<h3>Rooms</h3>
<div class="col-12">
<hr/>
<EditForm Model="@ModelRoom" OnSubmit="@SaveRoom">
<div class="col-12 row">
<label class="col-2">Room number</label>
<InputText class="form-control col-3" @bind-Value="ModelRoom.RoomIdentifier"/>
</div>
<br />
<div class="col-12 row">
<label class="col-2">Floor</label>
<InputNumber class="form-control col-3" @bind-Value="ModelRoom.Floor"/>
</div>
<br />
<div class="col-12 row">
<label class="col-2">Number of beds</label>
<InputNumber class="form-control col-3" @bind-Value="ModelRoom.NumberOfBeds"/>
</div>
<br />
<div class="col-12 row">
<span class="col-2"></span>
<input type="submit" class="form-control col-1 btn btn-primary" value="Submit"/>
<span> </span>
<input type="submit" class="form-control col-1 btn btn-primary" value="Clear"/>
</div>
</EditForm>
<div class="col-10">
<h3>Rooms</h3>
<table class="table">
<thead>
<tr>
<th>Room number</th>
<th>Capacity</th>
<th>Number of beds</th>
<th>Floor</th>
<th>Price</th>
<th>Is free?</th>
<th>Is out of service?</th>
<th>Need cleaning?</th>
</tr>
</thead>
<tbody>
@if (RoomList != null)
{
foreach (var room in RoomList)
{
<tr>
<td>@room.RoomIdentifier</td>
<td>@room.GuestsCapacity</td>
<td>@room.NumberOfBeds</td>
<td>@room.Floor</td>
<td>@room.Price</td>
<td>@room.IsFree</td>
<td>@room.IsOutOfService</td>
<td>@room.ShouldBeCleaned</td>
</tr>
}
}
else
{
<h3>..Loading</h3>
}
</tbody>
</table>
</div>
</div>
@code {
private List<Room> RoomList { get; set; }
private Room ModelRoom { get; set; }
protected override async Task OnInitializedAsync()
{
ModelRoom = new Room();
RoomList = roomService.GetAllRoomsAsync();
await base.OnInitializedAsync();
}
private async void SaveRoom()
{
ModelRoom.RoomReservations = new List<RoomReservation>();
ModelRoom.IsFree = true;
ModelRoom.IsOutOfService = false;
ModelRoom.ShouldBeCleaned = false;
await roomService.AddRoomAsync(ModelRoom);
ModelRoom = new Room();
}
}
感谢您的帮助我一直在寻找解决方案大约几个小时
解决方案
你应该使用OnValidSubmit = "@SaveRoom"
而不是 OnSubmit="@SaveRoom"
并且方法的返回类型SaveRoom
应该是Task
,而不是void
,如下所示。
private async Task SaveRoom()
{
}
为什么要使用 2 个“提交”按钮?删除第二个...
推荐阅读
- snakemake - Snakemake 扩展功能替代
- amazon-web-services - 从一个帐户中的 jenkins 启动 aws ssm 到另一个实例中的 ec2 以进行数据传输
- python - 在python中计算净力
- html - 图片隐藏在导航栏下方
- python - 如何在父类别中创建类别本身而不仅仅是 id
- typescript - 如何将 Nest 与 Firestore 功能一起使用?
- wpf - 如何在 WPF 中双击窗口标题栏后防止 MouseUp 事件?
- python - 从 kaitai struct 获取所有类型的平面图
- elasticsearch - Elasticsearch 7 track_total_hits 如何提高查询速度?
- mysql - 如何获得数据库列中的最大值?