函数完成后 Blazor 存储变量还原

Blazor stored variable reverting after function completion

提问人:aedom1 提问时间:10/25/2023 更新时间:10/26/2023 访问量:30

问:

我有一个相当简单的 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 个问题看起来非常相似,但都没有产生有效的解决方案。请帮忙,谢谢。

C# 变量 blazor-server-side

评论


答:

0赞 Mayur Ekbote 10/26/2023 #1

不要使用,使用.您的代码应如下所示:async voidasync 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 文档中的一些类似项目,但遇到了一些小问题。谢谢大家。

评论

0赞 Community 10/26/2023
您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。