AJAX ToolKit TabContainer:我可以捕获“活动的标签面板更改”事件

如何解决AJAX ToolKit TabContainer:我可以捕获“活动的标签面板更改”事件

| 我有一个带有几个
TabPanels
的AJAX ToolKit
TabContainer
控件。我想验证当前活动ѭ2的内容,以防止用户在数据无效的情况下使用其他内容。     

解决方法

如果需要在TabPanelChangingEvent服务器端执行操作,则需要通过更改ajaxcontroltoolkit源代码来执行此操作。 好消息:您可以轻松获得它     ,在这里,一个新的解决方案几乎可以满足您的需求:
OnClientActiveTabChanged
赛事开始
tabcontainer
New Tab索引保存在
Hiddenfield
tabindex
将重置为旧值(因此现在不会更改) 表单使用隐藏按钮触发asyncpostback。 在隐藏按钮的ѭ7中,检索OldTabIndex和NewTabIndex。 在Click事件结束时,tabcontainer的ѭ6被切换为新值。 因此,在更改TabContainer选项卡之前,将执行隐藏按钮的Click事件。 aspx:
<asp:Button  runat=\"server\" ID=\"hiddenTargetControlForTabContainer\" style=\"display:none\" />
<asp:UpdatePanel ID=\"TabContainerUpdatePanel\" runat=\"server\">
<Triggers>
    <asp:AsyncPostBackTrigger ControlID=\"hiddenTargetControlForTabContainer\" />
</Triggers>
<ContentTemplate>
      <asp:HiddenField ID=\"TabContainerActiveTab\" runat=\"server\" Value=\"0\" />   
      <AjaxControlToolkit:TabContainer ID=\"TabContainer1\" runat=\"server\" ActiveTabIndex=\"0\"
                                       OnClientActiveTabChanged=\"OrderTabContainerClientActiveTabChanged\"   >

            <AjaxControlToolkit:TabPanel runat=\"server\" ID=\"TabPanel1\" 
                                         HeaderText=\"TabPanel1\"
                                          >
                <ContentTemplate>
                                <asp:TextBox ID=\"TextBox1\" runat=\"server\"></asp:TextBox>


                </ContentTemplate>
            </AjaxControlToolkit:TabPanel>
            <AjaxControlToolkit:TabPanel  runat=\"server\" ID=\"TabPanel2\" 
                                          HeaderText=\"TabPanel2\" >
                <ContentTemplate>

                                <asp:TextBox ID=\"TextBox2\" runat=\"server\"></asp:TextBox>

                </ContentTemplate>
            </AjaxControlToolkit:TabPanel>
        </AjaxControlToolkit:TabContainer>
</ContentTemplate>
</asp:UpdatePanel>

<script type=\"text/javascript\">
    var TabContainerActiveTabControlID = \'<%= TabContainerActiveTab.ClientID %>\';
    var hiddenTargetControlForTabContainerControlID = \'<%= hiddenTargetControlForTabContainer.uniqueID %>\';

    function OrderTabContainerClientActiveTabChanged(sender,args) {
        var TabContainerActiveTabControl = $get(TabContainerActiveTabControlID);

        var OldtabIndex = parseInt(TabContainerActiveTabControl.value);
        var NewtabIndex = sender.get_activeTabIndex();

        if (!(OldtabIndex == NewtabIndex)) {
            sender.set_activeTabIndex(OldtabIndex);
            TabContainerActiveTabControl.value = NewtabIndex;

            __doPostBack(hiddenTargetControlForTabContainerControlID,\'\');

        }


    }
       后面的代码:
Protected Sub hiddenTargetControlForTabContainer_Click(ByVal sender As Object,ByVal e As System.EventArgs) Handles hiddenTargetControlForTabContainer.Click
    Dim oldActiveTabIndex = TabContainer1.ActiveTabIndex
    Dim newActiveTabIndex As Integer = Convert.ToInt32(TabContainerActiveTab.Value)

    \'your stuff here

    TabContainer1.ActiveTabIndex = newActiveTabIndex
End Sub
    ,问题:Ajax TabContainer ActiveTabChanged事件显示不正确的ActiveTabIndex。 例如。
TabContainer
包含3个选项卡,如果第二个选项卡是hide(服务器端的
visible
= false),则单击第三个选项卡,我们将得到ѭ13not = 1而不是2(服务器端代码上的预期活动索引为2)。 解: 注册选项卡容器的客户端事件:
OnClientActiveTabChanged=\"Tab_SelectionChanged\" 
然后定义javascript函数来处理上述事件,该事件将在内部将Tab索引存储在一个隐藏变量中。
function Tab_SelectionChanged(sender,e)
{ 
    document.getElementById(\'<%=hdntabIndex.ClientID %>\').value =  sender.get_activeTabIndex();
} 
在需要活动选项卡索引的位置后面的代码中使用隐藏的变量(
hdntabIndex
)。     ,您应该使用JavaScript来完成。 在这里,我做了一个例子,诀窍是使用
ValidationGroup
并将Old tab Index保存在called3 function调用的函数末尾
   <AjaxControlToolkit:TabContainer ID=\"TabContainer1\" runat=\"server\" Height=\"138px\"  
                                   Width=\"402px\" ActiveTabIndex=\"0\"
                                   OnClientActiveTabChanged=\"ValidateTab\"   >

        <AjaxControlToolkit:TabPanel runat=\"server\" ID=\"TabPanel1\" 
                                     HeaderText=\"TabPanel1\"
                                      >
            <ContentTemplate>


                            <asp:TextBox ID=\"TextBox1\" runat=\"server\"></asp:TextBox>
                            <asp:RequiredFieldValidator ID=\"RequiredFieldValidator1\" runat=\"server\" 
                                                        ErrorMessage=\"RequiredFieldValidator\"
                                                        ControlToValidate=\"TextBox1\"
                                                        ValidationGroup=\"TabPanel1\"
                                                        />

            </ContentTemplate>
        </AjaxControlToolkit:TabPanel>
        <AjaxControlToolkit:TabPanel  runat=\"server\" ID=\"TabPanel2\" 
                                      HeaderText=\"TabPanel2\" >
            <ContentTemplate>

                            <asp:TextBox ID=\"TextBox2\" runat=\"server\"></asp:TextBox>
                            <asp:RequiredFieldValidator ID=\"RequiredFieldValidator2\" runat=\"server\" 
                                                        ErrorMessage=\"RequiredFieldValidator\"
                                                        ControlToValidate=\"TextBox2\"
                                                        ValidationGroup=\"TabPanel2\"
                                                         />

            </ContentTemplate>
        </AjaxControlToolkit:TabPanel>
    </AjaxControlToolkit:TabContainer>
    <script type=\"text/javascript\">
        var OldtabIndex = 0;


         function ValidateTab(sender,args) {

            if (OldtabIndex == 0) {

                if  (!Page_ClientValidate(\'TabPanel1\')) {
                    sender.set_activeTabIndex(OldtabIndex);
                }
            }
            else if (OldtabIndex == 1) {

                if  (!Page_ClientValidate(\'TabPanel2\')) {
                    sender.set_activeTabIndex(OldtabIndex);
                }
            }

            OldtabIndex = sender.get_activeTabIndex();
         }

   </Script>      
    ,我知道回答这个问题可能来晚了,但是希望我能为那些像TabTabnels一样锅底锅的人提供一些帮助。 将OnClientActiveTabChanged = \“ showMap \”添加到ajaxToolkit:TabContainer。我的函数显然称为showMap(必须隐藏并显示Google街道地图,因为TabContainer都将其拧紧。因此,我不得不将Google街道地图移出容器,然后“伪造”将其放回容器中)。
<ajaxToolkit:TabContainer runat=\"server\" ID=\"tabs\" OnClientActiveTabChanged=\"showMap\">
   <ajaxToolkit:TabPanel runat=\"server\" ID=\"pnlZones\" HeaderText=\"Delivery Zones\">
       <ContentTemplate>
           ... 
       </ContentTemplate>
   </ajaxToolkit:TabPanel>
</ajaxToolkit:TabContainer>
然后创建javascript:
<script type=\"text/javascript\">
    function showMap() {
        var tabID = $(\'.ajax__tab_active\').attr(\'id\');
        if (tabID.indexOf(\'pnlZone\') > 0) {
            $(\'#mapHider\').css(\'height\',\'600px\');
        }
        else {
            $(\'#mapHider\').css(\'height\',\'0\');
        }
    }
</script>
然后,我们可以通过.ajax__tab active类找到活动选项卡,这是TabContainer将活动类设置为的对象。用jQuery捕获ID(.attr(\'id \'))...瞧,我们现在在当前哪个标签上。 为此,我将类的高度从0更改为600px。将溢出设置为隐藏后,它看起来好像地图在页面上并且仅在该容器中,但不是。 希望这会有所帮助!祝好运。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-