加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 从标签容器中的数据绑定gridview丢失更新面板触发器

发布时间:2020-12-16 09:40:24 所属栏目:asp.Net 来源:网络整理
导读:我在gridview中获取命令链接时遇到了一些麻烦,以保持它在初始回发后更改选项卡的能力.所以下面你会看到我的内容结构(大大简化): ajaxToolkit:TabContainer runat="server" ID="tabBody" ajaxToolkit:TabPanel runat="server" ID="tabPanel1" ContentTemplat
我在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中的另一行,则没有任何反应.

有没有办法构建这个,以便选项卡可以更改而不会丢失回发触发器或我是否会发生这种错误?

谢谢.

解决方法

回发触发器不会丢失.问题是由每个选项卡中的各个UpdatePanel引起的.

将整个TabContainer放在UpdatePanel中,您可以从选项卡中删除UpdatePanel(但您不必这样做).确保该新面板的UpdateMode设置为“始终”.

我认为在你的例子中它没有改变的原因是UpdatePanel只刷新它自己的内容和属性,决定是否可见tab是否为在UpdatePanel之外的div(tabPanel)设置.当您返回带有网格的选项卡时,您可以通过单击它来实现客户端,并且当它出错时.

要了解问题的根源并找出它在第一次回发期间的工作原理,您可能需要调试用于TabContainer控件的ajax工具包javascript.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读