提问人:aedom1 提问时间:10/25/2023 更新时间:10/26/2023 访问量:30
函数完成后 Blazor 存储变量还原
Blazor stored variable reverting after function completion
问:
我有一个相当简单的 blazor 服务器端应用,并且正在根据拖放将数据写入我的数据库。我的函数在 dragstart 时获取 id/type,在 drop 时获取相同的 id/type,但是当我启动 drop 函数时,我从 dragstart 函数存储的数据会恢复/消失。我做错了什么?
dragged 元素
<table class="table AssignmentsTable" draggable="true"
@ondragstart="@(e => AssignmentOnDragStart(item.Id, "Location"))"
@ondragstart:stopPropagation>
<tr>
<td>
<span>@item?.Description</span>
</td>
</tr>
</table>
drop 元素
<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;设置;}对于变量、public/private 和其他一些项目。我知道我只是在做一些愚蠢的事情,但不知所措(或者深夜太晚了)。堆栈上还有另外 2 个问题看起来非常相似,但都没有产生有效的解决方案。请帮忙,谢谢。
答:
0赞
Mayur Ekbote
10/26/2023
#1
不要使用,使用.您的代码应如下所示: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 并在进程控制台上检查输出。这将使您能够编写同步方法。
评论
0赞
aedom1
10/26/2023
感谢您对Mayur的帮助。你发布的内容并没有解决我的问题,但还是要感谢。我已经发布了一个问题的链接,最终将我带到了我需要的地方。睡觉和一两个怪物似乎总是有帮助的。
0赞
aedom1
10/26/2023
#2
在搞砸了很长一段时间之后,我最终让它与问题 53913396 一起工作。 我尝试了 MS 文档中的一些类似项目,但遇到了一些小问题。谢谢大家。
评论