2014-02-13 108 views
2

我遇到了一些问题。我有一些asp.net控件包装在更新面板中,但是当我点击提交按钮时,它跳转到页面的顶部。我在这里阅读了一堆帖子,他们要么使用一些javascript,要么在页面指令中设置MaintainPagePostion为“true”。我试图将其设置为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> 

+0

嗯,我想我知道这是我的命。我的应用程序中有一些页面路由。我做了一个项目的副本,并删除了我的global.asax文件中的页面路由代码,它的工作原理与以前一样。 – Vandel212

回答

0

有您指定的更新面板的触发器?如果您在触发器部分指定了触发器,则更新面板将更新而不会跳到顶部。您还需要提供updatemode =“conditional”。它可以这样做:

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

刚刚尝试过,依然如此。 – Vandel212

+0

尝试在您的提交按钮中单击此事件:UpdatePanel1.Update() – nitinvertigo

0

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

示例代码这里:

<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> 
+0

感谢您的建议。我尝试将更新模式设置为条件并添加触发器。就像我说的,过去一直很好。这就是为什么我很困惑。我编辑了我的帖子以显示我正在使用的代码。我希望有所帮助。 – Vandel212

+0

嗨Randell,我给我的第一个答案添加了示例代码。 – Cuhara

4

你可以做到这一点在4种方式:

  1. 从代码的背后 - Page.MaintainScrollPositionOnPostBack = true;

  2. 从Page指令 - MaintainScrollPositionOnPostback="true"

  3. 从Web.config - <pages maintainScrollPositionOnPostBack="true" />

  4. 使用Javascript。您可以使用以下链接中的代码。它的工作对我来说 -

http://weblogs.asp.net/andrewfrederick/archive/2008/03/04/maintain-scroll-position-after-asynchronous-postback.aspx

+0

顺便说一下,你使用的浏览器是什么?有时,这些纯粹是浏览器的具体问题,在这种情况下,javascript是最好的选择,因为这些代码驻留在客户端并且独立于呈现问题。 –

+0

我试过Chrome和Fire Fox。我已经尝试了#3。谢谢你的回应。我在某处看到维护滚动位置仅适用于IE浏览器。 – Vandel212

+0

出于同样的原因,在这种情况下,javascript是最好的选择。大多数浏览器对这种语言都有强大的支持。 –

0

好谢谢大家给了我的建议。事实证明,页面路由是造成这个问题的原因。因此,所有我必须做的就是它的工作是补充,而忽略该页面线在我的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. 
    } 

这帮助我解决这个问题:http://forums.asp.net/t/1743640.aspx

编辑

我添加了“routes.Ignore(”“);”代码来充当一个捕获所有,所以我真的不需要特别忽略“Booking.aspx”。请记住,虽然顺序在这里很重要。 Ignore(“”)必须是最后一个,否则其他路由都不会起作用。

再次感谢大家。

0

请尝试PageRequestManager处理

<script> 
       Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 



     function EndRequestHandler(sender, args) { 
      try { 

       sender._controlIDToFocus = null; 


      } 
      catch (e) { 
      } 
     } 

</script> 
相关问题