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