我有一个相当简单的 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;} 来获取变量、公共/私有和其他一些项目。我知道我只是在做一些愚蠢的事情,但我不知所措(或者已经太晚了)。堆栈上还有另外两个问题看起来非常相似,但都没有产生有效的解决方案。请帮忙,谢谢。
不要使用
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 并检查流程控制台上的输出。这将使您能够编写同步方法。