You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor拖拽事件中DragEventArgs无PreventDefault()方法问题求助

网格区块拖拽功能中DragEventArgs无PreventDefault方法的问题解决

我正在实现网格内区块的拖拽移动功能,区块的前端代码如下:

<div class="col-span-@b.ColSpan row-span-@b.RowSpan relative border border-black box-border"
     style="order:@b.Placement[_pageType].Order;"
     @ondblclick="(() => ChangeBlockProperties(b))"
     @ondragstart="@(() => DragStart(b))"
     @ondragover="@((DragEventArgs e) => DragOver(e))"
     @ondrop="@((DragEventArgs e) => Drop(e, b))">

对应的C#逻辑代码如下:

private async Task DragStart(FlyerBlock block)
{
    await js.InvokeVoidAsync("startDrag", block);
}

private async Task DragOver(DragEventArgs e)
{
    e.PreventDefault();
}

private async Task Drop(DragEventArgs e, FlyerBlock targetBlock)
{
    e.PreventDefault();
    var data = await js.InvokeAsync<string>("getDraggedBlock");
    var sourceBlock = JsonConvert.DeserializeObject<FlyerBlock>(data);

    // Swap the targetBlock and sourceBlock's placement
    var tempOrder = targetBlock.Placement[_pageType].Order;
    targetBlock.Placement[_pageType].Order = sourceBlock.Placement[_pageType].Order;
    sourceBlock.Placement[_pageType].Order = tempOrder;

    // Save the changes to the database
    await BlockManager.UpdateBlock(targetBlock);
    
}

在DragOver和Drop方法中调用e.PreventDefault();时,均出现错误提示:"DragEventArgs does not contain a definition for 'PreventDefault'"


问题原因与解决方法

这个错误是因为代码中错误引用了WinForms的System.Windows.Forms.DragEventArgs类型,而非Blazor/Web环境对应的Microsoft.AspNetCore.Components.Web.DragEventArgs类型。

解决步骤:

  • 检查代码文件顶部的using语句,移除using System.Windows.Forms;(如果存在)
  • 添加正确的命名空间引用:using Microsoft.AspNetCore.Components.Web;
  • 确保方法参数中的DragEventArgs是来自Blazor的Web命名空间

额外优化建议

当前拖拽逻辑中仅更新了targetBlock到数据库,sourceBlock的顺序修改未保存,刷新页面后会回滚。建议在Drop方法末尾补充:

await BlockManager.UpdateBlock(sourceBlock);

内容的提问来源于stack exchange,提问作者Adil15

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:15:24