如何在Blazor中实现拖放?

blazor c# html

我知道Blazor是一项新技术。它目前的发布状态为v0.5.1

但是,我目前正在为新的Web应用程序实现PoC。我们希望在应用中使用拖放功能。我尝试用Blazor方式实现它,但它不起作用。

我的droptarget:

<div class="col" ondragstart="@AllowDragOver" ondrop="@Add">

和可拖动的项目:

<span class="badge badge-warning" draggable="true">îtem 1</span>

Blazor C#代码:

@functions {

void Add()
{
     Items.Add("hello");
}

void AllowDragOver(UIDragEventArgs e)
{
}

}

问题是放置目标不会在浏览器中显示为放置目标:

在浏览器中拖放

到目前为止我所读到的是,当将事件处理程序附加到Blazor C#函数(例如ondragstart)时,默认行为是众所周知的“e.preventDefault()”,它应该使放置目标可以放置。

有谁知道如何解决这一问题?

斯文

一般承认的答案

我想发布我的解决方案。

到目前为止我发现的是dataTransfer.setData目前在Blazor 0.5.1中不起作用。我可以通过将拖动的元素保存在作为DI服务注入的共享C#类中来解决此问题。容器需要调用“e.preventDefault()”才能成为有效的放置目标。虽然这在C#中是不可能的,但您可以轻松地将其称为纯Javascript:

<div class="col-sm-1" dropzone="move" ondragenter="@(e => OnContainerDragEnter(e))" ondragover="event.preventDefault();" ondragleave="@(e => OnContainerDragLeave(e))"
 ondrop="@(e => OnContainerDrop(e, Date))" style="@_highlightColor;@_highlightDropTargetStyle">

使用C#拖放效果非常好,非常流畅,没有闪烁和中断。我将在接下来的几天里创建一个简单的工作示例。

更新:

以下是Github上的承诺演示: https//github.com/sven5/Blazor/tree/master/HelloWorldDragDrop


热门答案

是的,我们都知道可以从Blazor组件调用Javascript函数。那不是问题。您没有提供代码。但是,如果你绕过Blazor,并使用JavaScript获得代码,那么这就不是了。这让用户想起了在Blazor中创建树视图的用户,纯粹通过JavaScript实现了树视图。我已经另外建议了,最后他成功地创建了treeview而根本没有使用任何JavaScript。这是我们必须努力的目标:最大限度地减少JavaScript的使用并在客户端上使用C#。请参阅此处的树视图: 从JS更新时未检测到Blazor双向绑定



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow