我知道如何在Windows应用程序中拖放,但我无法在asp:label
控件中找到mousedown事件。
知道怎么做吗?
答案 0 :(得分:0)
正如John Saunders所说,你需要在这里使用客户端脚本。
我可能建议使用jQuery-UI与一些服务器端代码。检查下面的代码:它允许将标签拖放到droppable控件上(在此示例中仅为Panel1
)并将该控件的id保存在label的子隐藏字段的值中。稍后在服务器端回发时,您需要检查此新标签的父ID值,并在需要时将标签移动到新的父控件。要检查此代码,您需要引用jQuery和jQuery-UI库文件。
JavaScript的:
$(function () {
$("#<%= Label1.ClientID %>").draggable({ revert: "invalid" });
$("#<%= Panel1.ClientID %>").droppable({
activeClass: "ui-state-hover",
hoverClass: "ui-state-active",
drop: function (event, ui) {
$(ui.draggable).css({
"position": "",
"left": "",
"top": ""
});
$("#<%= Label1Parent.ClientID %>").val(this.id);
$(this).append(ui.draggable);
}
});
});
标记:
<asp:Panel runat="server" ID="Panel1" Style="border: 1px solid #000; width: 300px;
height: 300px;">
</asp:Panel>
<asp:Label runat="server" ID="Label1">Some label</asp:Label>
<asp:HiddenField runat="server" ID="Label1Parent" />
<asp:Button runat="server" Text="Just some postback button" />
服务器端代码:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
if (!string.IsNullOrEmpty(Label1Parent.Value) && Label1.Parent.ClientID != Label1Parent.Value)
{
Label1.Parent.Controls.Remove(Label1);
var newParent = FindControlRecursive(Page, Label1Parent.Value);
newParent.Controls.Add(Label1);
}
}
}
private static Control FindControlRecursive(Control rootControl, string clientID)
{
if (rootControl.ClientID == clientID)
return rootControl;
foreach (Control controlToSearch in rootControl.Controls)
{
var controlToReturn = FindControlRecursive(controlToSearch, clientID);
if (controlToReturn != null)
return controlToReturn;
}
return null;
}