2012-03-14 39 views
1

我無法弄清楚AsyncPostBackTrigger的EventName屬性中的'EventName'要求什麼。 (我看的觸發器是一個asp.net WebPart上的拖動事件,所以如果有人知道答案是基於此,很好)。AsyncPostBackTrigger EventName - 如何確定?

我在其他地方看到__EVENTTARGET應該給我這個控件的ID,觸發了該事件,並__EVENTARGUMENT應該給我的事件的名稱。

要揣摩觸發應該是什麼,我已經加入了一些代碼在我的網頁加載回發:

Me.txtEventTarget.Value = Me.Page.Request.Params("__EVENTTARGET") 
Me.txtEventArg.Value = Me.Page.Request.Params("__EVENTARGUMENT") 

當我觸發回發,我得到下面的輸出:

txtEventTarget:
ctl00 $ cphDataEntry $ 2區

txtEventArg:
拖動:WebPart_gwpucMyFiles:0

看起來'事件參數'實際上是一個由三部分組成的複合對象:事件的名稱,看起來像觸發事件的控件的ID的一部分,以及與事件關聯的值。

但是,ASP.Net對ID做了些什麼?我知道它用下劃線和美元符號做煩人的事情,但爲什麼它使用這兩個變量的不同格式?它們不應該都包含下劃線嗎?

當我認爲我的網頁的HTML源代碼,控件的ID更像是這樣的: 「ctl00_cphDataEntry_WebPartManager1_gwpucMyFiles」,但它永遠不會只是ID;兒童控制的標識被加上。

無論如何,當我嘗試這樣它不工作:

<Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ctl00_cphDataEntry_WebPartManager1_gwpucMyFiles" EventName="Drag"/> 
</Triggers> 

因此,沒有人知道我應該放什麼AsynchronousPostbackTrigger? EventName只是「拖動」?如果是這樣,我是否需要我的控件的完整ID作爲'ControlID'屬性?如果是這樣,我如何確定完整的ID?它應該是美元符號格式還是下劃線格式?

回答

1

ControlID應該是Web服務器控件的ID。說你有你的ZoneTemplate內以下標記:

<uc1:MyWebPart ID="MyWebPart1" runat="server" /> 

你只需要「MyWebPart1」在AsynchronousPostbackTrigger的控件ID屬性,即使在渲染HTML你會看到父控件的-掛起前的ID,美元符號作爲「name」屬性中的分隔符,下劃線作爲「id」元素中的分隔符。

WebPart和WebPartZone都沒有公開「拖動」事件,但WebPartManager公開了WebPartMoving事件,所以它看起來就是您想要處理的事情。試試這個:

<Triggers> 
     <asp:AsyncPostBackTrigger ControlID="WebPartManager1" EventName="WebPartMoving" /> 
</Triggers> 

我要把它留給你閱讀了關於處理該事件,並明確了Web部件引發,但看看你至少可以得到部分網頁提交第一份工作。

+0

非常感謝。我做了我應該做的第一件事,即研究WebPartManager。當Web部件開始移動時,WebPartMoving被觸發;完成後會觸發WebPartMoved。 – pabrams 2012-03-31 00:24:54