滚动到UserControl中的特定DataList项

时间:2011-07-13 20:03:25

标签: javascript jquery asp.net datalist datalistitem

我正在开发一个ASP.NET应用程序,其中我有一个嵌入在aspx页面中的3个用户控件,后者又使用了母版页。

2个用户控件中的3个具有DataList。我想滚动到usercontrol中的特定/选定的DataListItem。

另外,我看了这个帖子(http://forums.asp.net/t/1596201.aspx)。但我认为它不适用于我的情况。我在aspx页面中有MaintainScrollPositionOnPostback =“true” - 还没有运气。

如果有人可以帮助我找到一种方法来实现这个目标,那将会非常有帮助

标记看起来像这样

     <asp:DataList ID="dl" runat="server"
            SkinID="DataList" onitemcommand="dl_ItemCommand" 
            >
            <ItemTemplate>
                <asp:Label ID="lblIDTitle" runat="server" Text="ID: " />
                <asp:Label ID="dlLabel" runat="server" Text='<%# Eval("Id") %>'  />
                <asp:LinkButton ID="btnSelect" runat="server" CommandName="Select">Select</asp:LinkButton>
                <br />
                <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("DisplayName") %>' />
                <br />
            </ItemTemplate>
        </asp:DataList>

2 个答案:

答案 0 :(得分:2)

看起来很简单。以下是步骤:

  • 在包含datalist的用户控件中,添加了此方法..

     public void FocusControlOnPageLoad(string ClientID, System.Web.UI.Page page)
     {
         ClientScriptManager clientScript = this.Page.ClientScript;
         clientScript.RegisterClientScriptBlock(this.GetType(),"CtrlFocus",
    
                        @"<script> 
    
              function ScrollView()
    
              {
                 var el = document.getElementById('" + ClientID + @"')
                 if (el != null)
                 {        
                    el.scrollIntoView();
                    el.focus();
                 }
              }
    
              window.onload = ScrollView;
    
              </script>");
    
    } 
    
  • 从标记处可以看出,我有一个链接按钮。因此,使用OnItemCommand,只要单击链接按钮,我就会调用此函数。像这样的东西;

    protected void dlCommitment_ItemCommand(object source, DataListCommandEventArgs e)
    {            
        if (e.CommandName == "Select")
        {  
            LinkButton link = LinkButton)dlCommitment.Items[e.Item.ItemIndex].FindControl("btnSelectCMTMT");
             FocusControlOnPageLoad(link.ClientID, this.Page);
        }
    }
    

它就像一个魅力。感谢有关ScrollIntoView的帖子以及关于我上面发布的方法的代码项目文章。由于我匆忙,我无法附加链接。感谢那些原始发布此信息的人。

答案 1 :(得分:0)

最简单的技巧是,如果你有任何可聚焦的html元素,如datalist中的锚点或按钮,将tab index设置为零,或使用js将焦点放在它上面。