我正在使用主页的asp网站上工作。
我挣扎的网页结构如下:
<asp:UpdatePanel ID="MainUpdatePanel" runat="server">
<ContentTemplate>
<asp:Panel ID="Panel3" runat="server" CssClass="Panel">
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="gridpanel" runat="server" Visible="false" ClientIDMode="Static">
<asp:GridView ID="grdCombinedTransactions" runat="server" PageSize="40" AllowPaging="True" AllowSorting="true" etc etc >
<asp:TemplateField HeaderText="GL Account" >
<ItemTemplate>
<asp:TextBox ID="txtGLAccount" runat="server" Text='<%# Bind("GLAccount") %>' CssClass="txtGLAccount" OnTextChanged="txtGLAccount_TextChanged" AutoPostBack="true"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</asp:GridView>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
MainUpdatePanel内还有其他面板和其他更新面板,但这是我遇到问题的面板,特别是GridView。
txtGLAccount字段会在文本发生变化时导致PostBack。此PostBack滚动页面,使txtGLAccount字段位于页面底部。
我想阻止任何类型的滚动,因为这种行为看起来像是“跳跃”。并且对此页面的数据输入工作流程具有破坏性。
这可能吗?
谢谢!
答案 0 :(得分:2)
您可以做两件事:
在页面顶部的Page
指令中,您可以将MaintainScrollPositionOnPostback
属性设置为true
。这将导致页面在回发后返回到相同的滚动位置(无论是完整回发还是异步回发)
您可以使用javascript手动向服务,处理程序甚至页面方法发回回发。使用jquery插件实现这一点非常简单
最简单快捷的方法显然是选项1,因为您只需打开上述标志即可。但是,用户体验可能不是最好的,特别是如果这是一个大页面,您可能会在从服务器接收响应或通过更新面板发出请求时看到页面冻结一点。
选项2是目前最好的选择,但是需要做一些努力才能使客户端与服务器进行通信。回发对用户透明,如果没有对用户的可见反馈,例如“加载”和/或“成功”消息,您可能会认为没有发生任何事情
答案 1 :(得分:1)
您是否尝试过为更新面板使用触发器? (AsyncPostBackTrigger)
退房:What is the difference between AsyncPostBackTrigger & PostBackTrigger?
您也可以使用Page.MaintainScrollPositionOnPostBack属性,但您可能希望进行异步调用以防止页面“跳跃”,因为这只会将窗口滚动到回发时的位置。