Blazor 存储的变量在函数完成后恢复

问题描述 投票:0回答:1

我有一个相当简单的 blazor 服务器端应用程序,并基于拖放将数据写入我的数据库。我的函数致力于在拖拽开始时获取 id/类型,并且在拖放时获取相同的 id/类型,但是当我启动拖放函数时,从拖拽开始函数存储的数据会恢复/消失。我做错了什么?

拖动的元素

<table class="table AssignmentsTable" draggable="true"
@ondragstart="@(e => AssignmentOnDragStart(item.Id, "Location"))"
@ondragstart:stopPropagation>
    <tr>
        <td>
            <span>@item?.Description</span>
        </td>
    </tr>
</table>

掉落的元素

<h5 @ondrop="@(e => AssignmentOnDrop((ParentID ?? 0), "Company"))" ondragover="event.preventDefault()">@company.Name</h5>

.razor(代码)

string storedAssigneeType;
int storedAssigneeID;
string storedAssignmentType;
int storedAssignmentID;


public async void AssignmentOnDragStart(int id, string type)
{
    await JSRuntime.InvokeVoidAsync("console.log", $"Before: {type}: {id.ToString()}");
    storedAssigneeID = id;
    storedAssigneeType = type;
    await JSRuntime.InvokeVoidAsync("console.log", $"After: {storedAssigneeType}: {storedAssigneeID.ToString()}");
}

public async void AssignmentOnDrop(int id, string type)
{
    await JSRuntime.InvokeVoidAsync("console.log", $"Stored Assignee: {storedAssigneeType}: {storedAssigneeID.ToString()}");
    await JSRuntime.InvokeVoidAsync("console.log", $"{type}: {id.ToString()}");
    storedAssignmentID = id;
    storedAssignmentType = type;
    var result = @Service.AddAssignment(storedAssigneeType, storedAssigneeID, storedAssignmentType, storedAssignmentID);
    await JSRuntime.InvokeVoidAsync("console.log", $"{result.ToString()}");

}

我是新人,所以我尝试了很多错误的事情。我尝试了 {get;set;} 来获取变量、公共/私有和其他一些项目。我知道我只是在做一些愚蠢的事情,但我不知所措(或者已经太晚了)。堆栈上还有另外两个问题看起来非常相似,但都没有产生有效的解决方案。请帮忙,谢谢。

c# variables blazor-server-side
1个回答
0
投票

不要使用

async void
,使用
async Task
。您的代码应如下所示:

public async Task AssignmentOnDragStart(int id, string type)

public async Task AssignmentOnDrop(int id, string type)

@ondragstart="@(async(e) => await AssignmentOnDragStart(item.Id, "Location"))"

@ondrop="@(async(e) => await AssignmentOnDrop((ParentID ?? 0), "Company"))" 

此外,不要为此使用控制台日志记录。您可以执行一个简单的 Console.WriteLine 并检查流程控制台上的输出。这将使您能够编写同步方法。

© www.soinside.com 2019 - 2024. All rights reserved.