c# - 如何在 Blazor 中实现拖放?

标签 c# html blazor

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

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

我的目标:

<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)
{
}

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

Drag Drop in browser

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

有人知道如何解决这个问题吗?

斯文

最佳答案

我想发布我的解决方案。

到目前为止,我发现 dataTransfer.setData 目前在 Blazor 0.5.1 中不起作用。我可以通过将拖动的元素保存在作为 DI 服务注入(inject)的共享 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# 中运行得非常好,并且非常流畅,没有闪烁和中断。我将在接下来的几天创建一个简单的工作示例。

更新:

抱歉,我的示例已经过时,目前我没有足够的时间来维护这个演示及其源代码。所以我想添加一个指向 Chris Sainty 的工作演示的链接:https://chrissainty.com/investigating-drag-and-drop-with-blazor/

关于c# - 如何在 Blazor 中实现拖放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425677/

相关文章:

c# - 如何在 Visual C# 中使用设置

c# - 除以零返回无限

javascript - CSS(滚动): why is it not possible to base the command on class name instead of id?

html - 我一直在为此使用一个列表,但在这种情况下最好的是什么?

HTML 到 Swift 中的可读文本

Blazor 按钮,使用父组件@onclick

c# - 如何从 Blazor 页面修改布局?

Blazor 在尝试激活 DefaultAuthorizationPolicyProvider 时无法解析 AuthorizationOptions

c# - 使用 c# 和 razor 设置 html 元素的 id

c# - 如何将 Linq 扩展方法与 CodeFluent 实体模板一起使用?