我无法弄清楚'EventName'asp.net在AsyncPostBackTrigger的EventName属性中期待什么。 (我正在看的触发器是asp.net WebPart上的拖动事件,所以如果有人知道基于此的答案,那很好。)
我在别处读到__EVENTTARGET应该给我触发事件的控件的ID,而__EVENTARGUMENT应该给我这个事件的名称。
为了弄清楚触发器应该是什么,我在回发时在页面加载中添加了一些代码:
Me.txtEventTarget.Value = Me.Page.Request.Params("__EVENTTARGET")
Me.txtEventArg.Value = Me.Page.Request.Params("__EVENTARGUMENT")
当我触发回发时,我得到以下输出:
txtEventTarget:
ctl00 $ $ cphDataEntry zone2的
txtEventArg:
拖动:WebPart_gwpucMyFiles:0
看起来'event arguments'实际上是一个由三部分组成的复合对象:事件的名称,看起来像是触发事件的控件的ID的一部分,以及与事件关联的值。
但ASP.Net对ID做了什么呢?我知道下注和美元符号确实令人讨厌,但为什么它会为这两个变量使用不同的格式呢?它们不应该都包含下划线吗?
当我查看我的页面的html源代码时,控件ID看起来更像是这样的: “ctl00_cphDataEntry_WebPartManager1_gwpucMyFiles”,除了它不仅仅是那个ID;添加了子控件的ID。
无论如何,当我尝试这个时它不起作用:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ctl00_cphDataEntry_WebPartManager1_gwpucMyFiles" EventName="Drag"/>
</Triggers>
那么,有谁知道我应该把什么放在AsynchronousPostbackTrigger中? EventName只是“拖”吗?如果是这样,我是否需要“ControlID”属性的控件的完整ID?如果是这样,我如何确定完整的ID?它应该是美元符号格式还是下划线格式?
答案 0 :(得分:1)
ControlID应该是Web服务器控件的ID。假设您在ZoneTemplate中有以下标记:
<uc1:MyWebPart ID="MyWebPart1" runat="server" />
对于AsynchronousPostbackTrigger中的ControlID属性,您只需要“MyWebPart1”,即使在呈现的HTML 中,您将看到父控件的预先标记的ID,其中美元符号作为分隔符“name”属性和下划线作为“id”元素中的分隔符。
WebPart和WebPartZone都没有公开“Drag”事件,但是WebPartManager公开了WebPartMoving事件,所以看起来这就是你想要处理的事情。试试这个:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="WebPartManager1" EventName="WebPartMoving" />
</Triggers>
我会留给您阅读处理该事件并确定哪个Web部件触发了它,但看看您是否至少可以首先使部分页面回发工作。