2013-02-20 2 views
1

У меня есть код, который выглядит так, как будто он должен работать. Однако триггер, который ссылается на элемент управления с идентификатором управления «gvSearch», фактически является gridview внутри пользовательской панели управления.trigger controlID с пользовательской страницы управления

Как получить доступ к этому gridview, чтобы я мог использовать его в качестве триггера?

Спасибо!

<asp:UpdatePanel ID="pnlSearch" ChildrenAsTriggers="true" runat="server" > 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnSearch" /> 
      <asp:AsyncPostBackTrigger ControlID="gvSearch" /> 
     </Triggers> 
</asp:UpdatePanel> 

Спасибо!

Outline:

<%@ Page Title="test"> 
<%@ Register src="test1.ascx" tagname="test1" tagprefix="test1uc" %> 
    <UpdatePanel> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnSearch" /> 
      <asp:AsyncPostBackTrigger ControlID="gvSearch" /> 
     </Triggers> 
     <ContentTemplate> 
      <test1uc:test1 ID="test1a" runat="server" /> 
     </ContentTemplate> 
    </UpdatePanel> 

ответ

2

Какое событие вы хотите использовать в качестве триггера, то SelectedIndexChanged -Event? Затем примените соответствующий EventName.

<asp:AsyncPostBackTrigger ControlID="gvSearch" EventName="SelectedIndexChanged" /> 

Однако, это должно уже быть default событием для GridView (смотрите раздел remarks).

Посмотрите на эту тему: http://forums.asp.net/t/1136932.aspx

Update Я думаю, что лучший подход в данной ситуации является создание пользовательского события в вашем UserControl, который пузырилась от SelectedIndexChanged события из GridView в UC. Затем вы можете использовать это событие как AsyncPostBackTrigger для UpdatePanel, например:

<asp:AsyncPostBackTrigger ControlID="test1a" EventName="GridSearchClicked" /> 
+0

но контроль (GridView в данном случае) с ControlID из «gvSearch» находится внутри пользовательский элемент управления, и я пытаюсь выяснить, как получить доступ к нему с моей страницы .aspx - спасибо – SkyeBoniwell

+1

@ 999cm999: Обычная проблема, посмотрите ссылку, которую я предоставил последней. В общем, это нехорошо, когда разные UserControls зависят друг от друга, они больше не работают в одиночку. –

+0

, в этом случае UpdatePanel на моей странице содержит gridview, который существует в пользовательском элементе управления. – SkyeBoniwell

1

Откладывая факт, что требование доступа к субэлементу не является хорошей практикой, вот мое самым лучшее предложение ...

Создать Public Sub в вашем пользовательском элементе управления следующим образом:

Private ParentUpdatePanel As System.Web.UI.UpdatePanel 

' Must be called on every Page_Load! 
Public Sub RegisterAsyncTrigger(MyScriptManager As System.Web.UI.ScriptManager, MyUpdatePanel As System.Web.UI.UpdatePanel) 
    MyScriptManager.RegisterAsyncPostBackControl(gvSearch) 
    ParentUpdatePanel = MyUpdatePanel 
End Sub 

на событии Page_Load, вы бы вызвать функцию следующим образом:

Protected Sub Page_Load(Sender As Object, e As EventArgs) 
    ' Call our new function, passing in the current ScriptManager and the UpdatePanel 
    ' The ScriptManager handles the asynchronous postbacks 
    ' The UpdatePanel handles the dynamic updates 
    test1.RegisterAsyncTrigger(ScriptManager.GetCurrent(Me), pnlSearch) 
End Sub 

В обработчик событий внутри gvSearch GridView управления, который должен обновить панель будет содержать следующий код:

ParentUpdatePanel.Update() 
Смежные вопросы