我正在开发一个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>
答案 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将焦点放在它上面。