更新面板中的链接按钮导致页面刷新

Posted

技术标签:

【中文标题】更新面板中的链接按钮导致页面刷新【英文标题】:Link Button in Updatepanel causes page refresh 【发布时间】:2015-01-14 11:35:52 【问题描述】:

我正在开发网络应用程序。我想要中继器控件中的链接按钮。此中继器控件位于更新面板中。现在单击链接按钮会导致刷新。

我找到了解决方案,需要添加ClientIDMODE="AutoID"。它工作正常。但我的其他 javascript 停止工作。那么有什么替代方案可以让两者都能正常工作吗?

由于ClientIDMODE="AutoID" 而无法运行的 jquery 代码。

function setPage() 
            var page = document.location.pathname.match(/[^\/]+$/)[0];
            var pageName = page.split('.')[0];
            if (pageName != 'Default') 
                if ($('#' + pageName).hasClass('main')) 
                    $('#' + pageName).addClass('active');
                    var content = '<li><div class="sidebar-toggler hidden-phone"></div></li><li><a href="/Default.aspx">Dashboard<i class="icon-"></i></a></li>' + $('#' + pageName).children('ul').html();
                    $('#leftNavigation').append(content);
                    var currentActive = $('.nav ul li ul li.active');
                    if (currentActive != null) 
                        currentActive.removeClass('active');
                        currentActive.closest('ul').closest('li').removeClass('active');
                    
                
                else 
                    if ($('#' + pageName) != null) 
                        if ($('#' + pageName).closest('ul').html() != null) 

                            $('#' + pageName).closest('ul').closest('li').addClass('active');
                            $('#' + pageName).addClass('active');
                            var listItems = '<li><div class="sidebar-toggler hidden-phone"></div></li><li><a href="/Default.aspx">Dashboard<i class="icon-"></i></a></li>' + $('#' + pageName).closest('ul').html();
                            $('#leftNavigation').append(listItems);
                            var currentActive = $('.nav ul li ul li.active');
                            if (currentActive != null) 
                                currentActive.removeClass('active');
                                currentActive.closest('ul').closest('li').removeClass('active');
                            
                        

                        else 
                            var directory = document.location.pathname.substring(1, document.location.pathname.lastIndexOf('/'));
                            var dir_name = directory.toLowerCase() + '_main'
                            if (directory != null || '/') 
                                $('#' + dir_name).addClass('active');
                                var content = '<li><div class="sidebar-toggler hidden-phone"></div></li><li><a href="/Default.aspx">Dashboard<i class="icon-"></i></a></li>' + $('#' + dir_name).children('ul').html();
                                $('#leftNavigation').append(content);
                                var currentActive = $('.nav ul li ul li.active');
                                if (currentActive != null) 
                                    currentActive.removeClass('active');
                                    currentActive.closest('ul').closest('li').removeClass('active');
                                
                            
                        
                    
                
            
            else 
                var listItems = '<li><div class="sidebar-toggler hidden-phone"></div></li><li class="active"><a href="/Default.aspx">Dashboard<i class="icon-"></i></a></li>';
                $('#leftNavigation').append(listItems);
            
        

【问题讨论】:

请创建一个小提琴并发布您的所有代码,以便我们可以准确了解您在做什么 jsfiddle.net 【参考方案1】:

每当您引用您需要的将 clientid 模式设置为 auto 的项目时,您需要引用控件的 ClientID 而不是 ID。你可以这样做:

$("#<%= mycontrol.ClientID %>").dosomething();

这会写出为任何带有 runat="server" 的控件的客户端脚本生成的唯一 ID。

【讨论】:

感谢您的建议,但我能再帮个忙吗?如何以您建议的形式表示$('#' + pageName)?这里 pageName 是一个字符串。【参考方案2】:

实际上我尝试了不同的方案来解决这个问题。我使用 classname 而不是 id 来识别元素。

所以在 jquery 中使用 . 代替 # 并在 html 代码中添加与 id 相同的类名。

所以现在 Jquery 代码是:

function setPage() 
            var page = document.location.pathname.match(/[^\/]+$/)[0];
            var pageName = page.split('.')[0];
            if (pageName != 'Default') 
                if ($("."+pageName).hasClass('main')) 
                    $('.' + pageName).addClass('active');
                    var content = '<li><div class="sidebar-toggler hidden-phone"></div></li><li><a href="/Default.aspx">Dashboard<i class="icon-"></i></a></li>' + $('.' + pageName).children('ul').html();
                    $('#leftNavigation').append(content);
                    var currentActive = $('.nav ul li ul li.active');
                    if (currentActive != null) 
                        currentActive.removeClass('active');
                        currentActive.closest('ul').closest('li').removeClass('active');
                    
                
                else 
                    if ($('.' + pageName) != null) 
                        if ($('.' + pageName).closest('ul').html() != null) 

                            $('.' + pageName).closest('ul').closest('li').addClass('active');
                            $('.' + pageName).addClass('active');
                            var listItems = '<li><div class="sidebar-toggler hidden-phone"></div></li><li><a href="/Default.aspx">Dashboard<i class="icon-"></i></a></li>' + $('.' + pageName).closest('ul').html();
                            $('#leftNavigation').append(listItems);
                            var currentActive = $('.nav ul li ul li.active');
                            if (currentActive != null) 
                                currentActive.removeClass('active');
                                currentActive.closest('ul').closest('li').removeClass('active');
                            
                        

                        else 
                            var directory = document.location.pathname.substring(1, document.location.pathname.lastIndexOf('/'));
                            var dir_name = directory.toLowerCase() + '_main'
                            if (directory != null || '/') 
                                $('.' + dir_name).addClass('active');
                                var content = '<li><div class="sidebar-toggler hidden-phone"></div></li><li><a href="/Default.aspx">Dashboard<i class="icon-"></i></a></li>' + $('.' + dir_name).children('ul').html();
                                $('#leftNavigation').append(content);
                                var currentActive = $('.nav ul li ul li.active');
                                if (currentActive != null) 
                                    currentActive.removeClass('active');
                                    currentActive.closest('ul').closest('li').removeClass('active');
                                
                            
                        
                    
                
            
            else 
                var listItems = '<li><div class="sidebar-toggler hidden-phone"></div></li><li class="active"><a href="/Default.aspx">Dashboard<i class="icon-"></i></a></li>';
                $('#leftNavigation').append(listItems);
            
        

【讨论】:

以上是关于更新面板中的链接按钮导致页面刷新的主要内容,如果未能解决你的问题,请参考以下文章

转发器会导致整个页面的回发,即使它位于更新面板内

更新面板更新()方法不起作用,如何在函数内强制刷新页面

单击表单中的按钮会导致页面刷新

单击表单中的按钮会导致页面刷新

从另一个控件中的控件刷新 asp.net 页面

当通过链接或后退按钮打开时,强制 JSF 刷新页面/视图/表单