2

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

3 个中的 2 个用户控件有一个 DataList。我想滚动到用户控件中的特定/选定的 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>
4

2 回答 2

2

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

  • 在包含数据列表的用户控件中,添加了此方法..

     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 的文章和一篇关于我在上面发布的方法的代码项目文章。由于我赶时间,我无法附上链接。感谢最初发布此信息的人。

于 2011-07-25T13:00:51.780 回答
0

最简单的技巧是,如果您在 datalist 中有任何可聚焦的 html 元素(如锚点或按钮),将选项卡索引设置为零,或使用 js 将焦点放在它上面。

于 2011-07-13T20:08:39.567 回答