AsyncPostBackTrigger EventName - как определить? - PullRequest
1 голос
/ 14 марта 2012

У меня возникают проблемы с выяснением того, что ожидает asp.net «EventName» в атрибуте EventName AsyncPostBackTrigger. (Триггер, на который я смотрю, - это событие перетаскивания на веб-части asp.net, поэтому, если кто-нибудь знает ответ, основанный на этом, отлично.)

Я читал в другом месте, что __EVENTTARGET должен дать мне идентификатор элемента управления, который вызвал событие, а __EVENTARGUMENT должен дать мне имя события.

Чтобы попытаться выяснить, каким должен быть триггер, я добавил код в мою загрузку страницы при обратной передаче:

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

И когда я запускаю обратную передачу, я получаю следующий вывод:

txtEventTarget:
ctl00 $ cphDataEntry $ Zone2

txtEventArg:
Drag: WebPart_gwpucMyFiles: 0

Похоже, что «аргументы события» на самом деле составной объект, состоящий из трех частей: имя события, то, что выглядит как часть идентификатора элемента управления, инициирующего событие, и значение, связанное с событием.

Но что, черт возьми, ASP.Net делает с идентификаторами? Я знаю, что это раздражает вещами с подчеркиванием и знаком доллара, но почему он использует другой формат для этих двух переменных? Разве они не должны содержать подчеркивания?

Когда я просматриваю HTML-источник моей страницы, идентификатор элемента управления выглядит примерно так: "ctl00_cphDataEntry_WebPartManager1_gwpucMyFiles", за исключением того, что это никогда не просто этот идентификатор; ID дочерних элементов управления прикреплены.

Во всяком случае, когда я пытаюсь это сделать, это не работает:

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

Итак, кто-нибудь знает, что я должен поместить в AsynchronousPostbackTrigger? Является ли EventName просто "Drag"? Если да, нужен ли мне полный идентификатор моего элемента управления для атрибута «ControlID»? Если так, как я могу определить полный идентификатор? Должно ли оно быть в формате знака доллара или подчеркивания?

1 Ответ

1 голос
/ 15 марта 2012

ControlID должен быть идентификатором элемента управления веб-сервера. Скажем, у вас есть следующая разметка внутри вашего ZoneTemplate:

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

Вам нужно только «MyWebPart1» для свойства ControlID в AsynchronousPostbackTrigger, даже если в отрендеренном HTML вы увидите предопределенные идентификаторы родительских элементов управления со знаком доллара в качестве разделителя в «» атрибут name и символ подчеркивания в качестве разделителя в элементе id.

Ни WebPart, ни WebPartZone не предоставляют событие "Перетаскивание", но WebPartManager предоставляет событие WebPartMoving, поэтому, похоже, именно это вы и хотите обработать. Попробуйте это:

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

Я предоставлю вам возможность ознакомиться с обработкой этого события и определить, какая веб-часть его инициировала, но посмотрим, сможете ли вы хотя бы сначала запустить частичный постбэк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...