2012-05-24 77 views
0

这是我的情况。我有一个网页表单页面,当整个页面每次点击一个控件时都会滚动到顶部,所以我正在尝试将更新面板应用到我的页面,这让人讨厌。从更新面板刷新整个页面

取决于各个更新面板的内容是否处于正确的状态,提交按钮可以或不可以点击。

当点击提交按钮时,它可能会影响页面上的任何控件。

我知道我可以使用更新面板的<triggers>标记元素来做一些操作,但我不希望必须使用自己的触发器将所有内容放到更新面板中,我宁愿提交按钮只是重新加载整个页面。

为了简单起见,我把一个示例项目放在一起来表示我的页面。它有一个“重置”按钮,代表“提交”按钮。

母版页:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="WebApplication1.SiteMaster" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head runat="server"> 
    <title></title> 
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> 
    <asp:ContentPlaceHolder ID="HeadContent" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form runat="server"> 
    <asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" /> 

    <div class="page"> 
     <div class="header"> 
      <div class="title"> 
       <h1> 
        My ASP.NET Application 
       </h1> 
      </div> 
      <div class="loginDisplay"> 
       <asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false"> 
        <AnonymousTemplate> 
         [ <a href="~/Account/Login.aspx" ID="HeadLoginStatus" runat="server">Log In</a> ] 
        </AnonymousTemplate> 
        <LoggedInTemplate> 
         Welcome <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /></span>! 
         [ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out" LogoutPageUrl="~/"/> ] 
        </LoggedInTemplate> 
       </asp:LoginView> 
      </div> 
      <div class="clear hideSkiplink"> 
       <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"> 
        <Items> 
         <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/> 
         <asp:MenuItem NavigateUrl="~/About.aspx" Text="About"/> 
        </Items> 
       </asp:Menu> 
      </div> 
     </div> 
     <div class="main"> 
      <asp:ContentPlaceHolder ID="MainContent" runat="server"/> 
     </div> 
     <div class="clear"> 
     </div> 
    </div> 
    <div class="footer"> 

    </div> 
    </form> 
</body> 
</html> 

默认页面:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 



<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 

</asp:Content> 
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 

    <asp:Label runat=server Text="This lable represents things not in update panels" ID="label1"></asp:Label> 

    <asp:UpdatePanel ID="UpdatePanel1" runat=server> 
     <ContentTemplate> 
      <table> 
       <tr> 
        <td><asp:Button ID="button1" runat="server" OnClick="Button1_click" Text="Button 1" /></td> 
        <td><asp:TextBox ID="textBox1" runat="server" Text="StartText" Enabled="false" /></td> 
       </tr> 
      </table> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

    <asp:UpdatePanel ID="UpdatePanel2" runat=server> 
     <ContentTemplate> 
      <table> 
       <tr> 
        <td><asp:Button ID="button2" runat="server" OnClick="Button2_click" Text="Button 2" /></td> 
        <td><asp:TextBox ID="textBox2" runat="server" Text="StartText" Enabled="false" /></td> 
       </tr> 
      </table> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

    <asp:UpdatePanel ID="UpdatePanelReset" runat=server> 
     <ContentTemplate> 
      <asp:Button ID="reset" runat="server" OnClick="Reset_click" Text="reset" /> 
     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="button1" EventName="click" /> 
      <asp:AsyncPostBackTrigger ControlID="button2" EventName="click" /> 
     </Triggers> 
    </asp:UpdatePanel> 

</asp:Content> 

后面的代码

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Xml.Linq; 

namespace WebApplication1 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void Button1_click(object sender, EventArgs e) 
     { 
      textBox1.Enabled = !textBox1.Enabled; 
      reset.Enabled = !textBox1.Enabled && !textBox2.Enabled; 
     } 

     protected void Button2_click(object sender, EventArgs e) 
     { 
      textBox2.Enabled = !textBox2.Enabled; 
      reset.Enabled = !textBox1.Enabled && !textBox2.Enabled; 
     } 

     protected void Reset_click(object sender, EventArgs e) 
     { 
      textBox1.Text = "StartText"; 
      textBox2.Text = "StartText"; 
      label1.Text = "reset button clicked"; 
     } 
    } 
} 

回答

1

只是PostBackTrigger添加到最后的UpdatePanel。

<asp:PostBackTrigger ControlID="reset" />