C# 即使使用更新面板,页面也会跳到页面顶部

C# 即使使用更新面板,页面也会跳到页面顶部,c#,asp.net,ajax,updatepanel,C#,Asp.net,Ajax,Updatepanel,我遇到了一点问题。我有一些asp.net控件包装在更新面板中,但当我单击“提交”按钮时,它会跳到页面顶部。我在这里读了很多文章,它们要么需要使用一些javascript,要么在page指令中将MaintaintPagePostion设置为“true”。我试着把它设为真,但没用。我真的不想使用javascript脚本来实现这一点。我的印象是,这是使用更新面板的好处之一。然而,我发现最让人困惑的是,它习惯于不这样做。我不记得在网站上做过任何可能导致这种情况的改变。对此问题的任何帮助都将不胜感激。谢谢

我遇到了一点问题。我有一些asp.net控件包装在更新面板中,但当我单击“提交”按钮时,它会跳到页面顶部。我在这里读了很多文章,它们要么需要使用一些javascript,要么在page指令中将MaintaintPagePostion设置为“true”。我试着把它设为真,但没用。我真的不想使用javascript脚本来实现这一点。我的印象是,这是使用更新面板的好处之一。然而,我发现最让人困惑的是,它习惯于不这样做。我不记得在网站上做过任何可能导致这种情况的改变。对此问题的任何帮助都将不胜感激。谢谢

这是我正在使用的代码

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
    <asp:Panel ID="pnlEmailStuff" runat="server">
        Name: <asp:TextBox ID="txtName" runat="server" Width="202px"></asp:TextBox><br />
        Email: <asp:TextBox ID="txtEmail" runat="server" Width="203px"></asp:TextBox><br />
                <span style="font-size:12px; font-weight:normal; margin-left:55px;">**Please double check email**</span><br />
        Message:<br />
        <asp:TextBox ID="txtMessage" runat="server" Width="370px" TextMode="MultiLine" Font-Names="Tahoma" Font-Size="Small" Height="75px"></asp:TextBox><br />
        <asp:Label ID="lblEmailError" runat="server" Text="" Font-Size="Small" ForeColor="Red"></asp:Label> 
        <asp:ImageButton Height="25px" Width="60px" CssClass="EmailSubmit" ImageUrl="Images/MailingListBtnSubmit2.png" ID="btnSubmit" runat="server" onclick="btnSubmit_Click"/>
    </asp:Panel>
    <asp:Panel ID="pnlThankYou" runat="server" Visible="false">
        <p style="text-align:center; font-size:30px;">Thank you!<br /><span style="font-size:20px;">Your Email has been sucessfully submitted.</span></p>
    </asp:Panel>
</ContentTemplate>

名称:
电子邮件:
**请仔细检查电子邮件**
消息:

谢谢您
您的电子邮件已成功提交


您是否在更新面板中指定了触发器?如果在触发器部分中指定触发器,则更新面板将在不跳到顶部的情况下进行更新。此外,还需要给出updatemode=“conditional”。可以这样做:

<asp:UpdatePanel ID="ex" runat="server" UpdateMode="Conditional">
<ContentTemplate>
//your controls here
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="yourbuttonid" />
</Triggers>
</asp:UpdatePanel>

//你的控制在这里

我认为,这不是跳转到页面顶部。它正在刷新页面。你的更新面板的UpdateMode是什么?这是有条件的吗?如果是有条件的,请检查触发器。ControlID应该是按钮ID和EventName='Click'。然后检查更新面板的区域

此处的示例代码:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
    <asp:Panel ID="pnlEmailStuff" runat="server">
        Name: <asp:TextBox ID="txtName" runat="server" Width="202px"></asp:TextBox><br />
        Email: <asp:TextBox ID="txtEmail" runat="server" Width="203px"></asp:TextBox><br />
                <span style="font-size:12px; font-weight:normal; margin-left:55px;">**Please double check email**</span><br />
        Message:<br />
        <asp:TextBox ID="txtMessage" runat="server" Width="370px" TextMode="MultiLine" Font-Names="Tahoma" Font-Size="Small" Height="75px"></asp:TextBox><br />
        <asp:Label ID="lblEmailError" runat="server" Text="" Font-Size="Small" ForeColor="Red"></asp:Label> 
        <asp:ImageButton Height="25px" Width="60px" CssClass="EmailSubmit" ImageUrl="Images/MailingListBtnSubmit2.png" ID="btnSubmit" runat="server" onclick="btnSubmit_Click"/>
    </asp:Panel>
    <asp:Panel ID="pnlThankYou" runat="server" Visible="false">
        <p style="text-align:center; font-size:30px;">Thank you!<br /><span style="font-size:20px;">Your Email has been sucessfully submitted.</span></p>
    </asp:Panel>
</ContentTemplate>
<Triggers>
             <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>

名称:
电子邮件:
**请仔细检查电子邮件**
消息:

谢谢您
您的电子邮件已成功提交


您可以通过4种方式完成:

  • 从代码隐藏-Page.MaintainScrollPositionOnPostBack=true

  • 从页面指令-
    maintaintScrollPositionOnPostback=“true”

  • 从Web.config-

  • 使用Javascript。您可以使用以下链接中的代码。它对我有用-


  • 好的,谢谢所有给我建议的人。事实证明,页面路由是导致此问题的原因。所以我要做的就是在我的RegisterRoutes代码块中添加并忽略该页面的行:

        void RegisterRoutes(RouteCollection routes)
        {
            routes.Ignore("Mobile");
            routes.Ignore("Booking.aspx*");//<---- This Fixed it.
            routes.MapPageRoute("Gallery", "Gallery/{Name}", "~/Gallery.aspx");
            routes.Ignore("*");//<---- This is better for me. It acts as a catch all.
        }
    
    void registerOutes(路由收集路由)
    {
    路线。忽略(“移动”);
    
    routes.Ignore(“Booking.aspx*”);//请尝试PageRequestManager处理程序

    <script>
                  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    
    
    
            function EndRequestHandler(sender, args) {
                try {
    
                    sender._controlIDToFocus = null;
    
    
                }
                catch (e) {
                }
            }
    
    </script>
    
    
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    函数EndRequestHandler(发送方,参数){
    试一试{
    发送方。\u controlIDToFocus=null;
    }
    捕获(e){
    }
    }
    
    我被一个类似的问题困了几个小时。我确信问题出在更新面板上,但结果是表单标签中的默认焦点&默认按钮属性导致页面跳起来聚焦页面顶部的第一个文本框


    这是在面对此类问题时需要考虑的另一个问题。

    谢谢你的建议。我尝试将更新模式设置为有条件并添加触发器。正如我所说,它过去很好。这就是为什么我如此困惑的原因。我编辑了我的帖子以显示我正在使用的代码。我希望这会有所帮助。嗨,Randell,我在我的第一个答案中添加了示例代码。尝试将其保存在提交按钮单击事件中:UpdatePanel1.Update()顺便问一下,您使用的浏览器是什么?有时候,这些都是纯浏览器特有的问题,在这种情况下,javascript是最好的选择,因为这些代码驻留在客户端,与呈现问题无关。我尝试了Chrome和Fire Fox。我已经试过了#3。不过感谢您的回复。我在某个地方读到n仅适用于IE。出于同样的原因,javascript是这种情况下的最佳选择。大多数浏览器对这种语言都有强大而相同的支持。我使用了4°解决方案,js,很好,谢谢你!对于1°nothing happenedWell,我想我知道是什么在折磨我。我的应用程序中有一些页面路由。我复制了一个项目并删除了我需要的代码n my global.asax文件用于页面路由,它的工作方式与以前一样。