Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将条目添加到数据库后Blazor组件未刷新_C#_Entity Framework_Asp.net Core_Blazor_Blazor Server Side - Fatal编程技术网

C# 将条目添加到数据库后Blazor组件未刷新

C# 将条目添加到数据库后Blazor组件未刷新,c#,entity-framework,asp.net-core,blazor,blazor-server-side,C#,Entity Framework,Asp.net Core,Blazor,Blazor Server Side,我正在开发一个简单的应用程序来管理Blazor服务器端的酒店预订,使用EF Core作为数据库。我有一个酒店房间的添加表单,在同一个页面上我显示了所有房间的列表,我目前面临一个问题,当我添加一个新房间时,组件本身没有刷新,我必须单击F5以再次填充我的列表。我在youtube上发现了这个,他也在做类似的事情,这对他来说很有用。我也试着在我的页面代码中加入statehaschange,但什么也没发生 这是页面代码: @page "/rooms" @using HotelServi

我正在开发一个简单的应用程序来管理Blazor服务器端的酒店预订,使用EF Core作为数据库。我有一个酒店房间的添加表单,在同一个页面上我显示了所有房间的列表,我目前面临一个问题,当我添加一个新房间时,组件本身没有刷新,我必须单击F5以再次填充我的列表。我在youtube上发现了这个,他也在做类似的事情,这对他来说很有用。我也试着在我的页面代码中加入statehaschange,但什么也没发生

这是页面代码:

@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>&nbsp;</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();
    }
}
@page”/rooms
@使用HotelServiceSystem.Interfaces.Services
@使用HotelServiceSystem.Entities
@注入IRoomService roomService
房间

房间号
地板
病床数
房间 房间号 容量 病床数 地板 价格 是免费的吗? 它停止服务了吗? 需要清洗吗? @if(RoomList!=null) { foreach(房间列表中的var房间) { @房间标识符 @客房容量 @房间,床数 @房间,地板 @房间,价格 @房间是免费的 @房间自动服务 @应该打扫房间吗 } } 其他的 { …装载 } @代码{ 私有列表RoomList{get;set;} 私人房间模型室{get;set;} 受保护的重写异步任务OnInitializedAsync() { 模型室=新房间(); RoomList=roomService.GetAllRoomsAsync(); wait base.OnInitializedAsync(); } 专用异步void存储室() { ModelRoom.RoomReservations=新列表(); ModelRoom.IsFree=true; ModelRoom.IsOutOfService=false; ModelRoom.shouldbeclean=false; 等待roomService.AddRoomAsync(ModelRoom); 模型室=新房间(); } }

感谢您的帮助,我已经寻找了大约几个小时的解决方案

您应该使用
OnValidSubmit=“@SaveRoom”
而不是
OnSubmit=“@SaveRoom”

SaveRoom
方法的返回类型应该是
Task
,而不是
void
,如下所示

private async Task SaveRoom()
 {
       
 }

为什么使用2个“提交”按钮?删除第二个…

您忘记更新
RoomList
,如下所示:
等待roomService.AddRoomAsync(ModelRoom);房间列表。添加(模型室);StateHasChanged()是的,我可以看到,但视频上的家伙也没有这样做,它可能来自数据库,或者不是?它现在可以工作,但我有一个奇怪的问题,如果我保存数据的方法是在这种情况下的存储空间,它是异步的,我必须点击提交2次来保存它,有人知道为什么吗?