我在gridview中获取命令链接时遇到了一些问题,以保持它在初始回发后更改选项卡的能力。所以下面你会看到我的内容结构(大大简化):
<ajaxToolkit:TabContainer runat="server" ID="tabBody">
<ajaxToolkit:TabPanel runat="server" ID="tabPanel1">
<ContentTemplate>
<asp:UpdatePanel runat="server" ID="updPanel1">
<ContentTemplate>
<asp:Gridview runat="server" ID="grd1" OnRowCommand="grd1_RowCommand" OnRowDataBound="grd1_RowDataBound">
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkChangePanels" runat="server" CommandArgument='<%#Eval("id") %>' CommandName="gotopanel2" Text='<%#Eval("FirstName") & " " & Eval("LastName")%>' />
</ItemTemplate>
</asp:TemplateField>
</asp:Gridview>
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</ajaxToolkit:TabPanel>
<ajaxToolkit:TabPanel runat="server" ID="tabPanel2">
<ContentTemplate>
<asp:UpdatePanel runat="server" ID="updPanel2">
<ContentTemplate>
<asp:Gridview runat="server" ID="grd2">
</asp:Gridview>
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
</ajaxToolkit:TabPanel>
</ajaxToolkit:TabContainer>
为了填充面板1上的gridview,有一个用户输入的搜索框,我调用一个函数将linq查询绑定到它。
现在我将rowcommand添加为rowdatabound上的回发触发器:
Protected Sub grd1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
Dim lb As LinkButton = CType(e.Row.FindControl("lnkChangePanels"), LinkButton)
If Not lb Is Nothing Then
ToolkitScriptManager1.RegisterPostBackControl(lb)
End If
End If
End Sub
然后,这是我必须触发选项卡面板更改(以及执行其他一些操作)的代码:
Protected Sub grd1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grd1.RowCommand
Dim id = e.CommandArgument.ToString()
Select Case e.CommandName
Case "gotopanel2"
eventDetails(id, "C")
tabBody.ActiveTab = tabPanel2
End Select
End Sub
这会导致正确的回发并更改选项卡,一切都按预期工作。但是如果我回到第一个标签并尝试点击gridview 1中的另一行,则没有任何反应。
有没有办法构建这个,以便选项卡可以更改而不会丢失回发触发器,或者我是否会解决这个问题?
感谢。
答案 0 :(得分:1)
回发触发器不会丢失。问题是由每个选项卡中的各个UpdatePanel引起的。
将整个TabContainer放在UpdatePanel中,您可以从标签中删除UpdatePanel(但您不必这样做)。确保该新面板的UpdateMode设置为&#34;始终&#34;。
我认为在您的示例中它没有改变的原因是UpdatePanel只刷新它自己的内容和属性,决定是否可见tab是否为在UpdatePanel之外的div(tabPanel)设置。当您返回带有网格的标签时,您可以通过点击它来实现客户端,以及当它出错时。
要了解问题的根源并找出它在第一次回发期间的工作原理,您可能需要调试ajax toolkit javascript以进行TabContainer控制。