如何在Blazor中实现拖放?

Sve*_*ven 4 html c# blazor

我知道Blazor是一项新技术。当前版本为v0.5.1

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

我的放置目标:

<div class="col" ondragstart="@AllowDragOver" ondrop="@Add">
Run Code Online (Sandbox Code Playgroud)

和可拖动的项目:

<span class="badge badge-warning" draggable="true">îtem 1</span>
Run Code Online (Sandbox Code Playgroud)

Blazor C#代码:

@functions {

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

void AllowDragOver(UIDragEventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)

}

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

在浏览器中拖放

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

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

斯文

Sve*_*ven 7

我想发布我的解决方案。

到目前为止,我发现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">
Run Code Online (Sandbox Code Playgroud)

拖放在C#上效果很好,并且非常平滑,没有闪烁和中断。在接下来的几天中,我将创建一个简单的工作示例。

更新:

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

  • @SeriousK。我终于设法创建了一个可行的示例。请在上方查看我的最新答案。 (2认同)