为什么我的一个页面a.aspx里有一个提交按钮 ,Page_Load里:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
strReportCode =Context.Request.QueryString["ReportCode"];
HttpCookie cookie = Request.Cookies ["MyFirstCookie"];
if(!IsPostBack)
{
BindDropDownList();//绑定DropDownList

BindHour();//绑定DropDownList
BindSolveWayName();//绑定DropDownList
BindServeWay();//绑定DropDownList
lbName.Text=cookie["ServerName"].ToString();//为lable赋值
}

}
private void btnAdd_Click(object sender, System.EventArgs e)
                  {
                         //向数据库中插入记录
                   }每次刷新页面得时候会自动执行btnAdd_Click(),而且点击浏览器得后退按钮也是。我觉得每次刷新页面得时候首先要执行PAGE_Load函数。可是我的PAGE_Load()没有调用btnAdd_Click()啊。
到底时哪里出了问题了那?

解决方案 »

  1.   

    没代码,用排除法,在代码中查找一下btnAdd_Click这个不就知道你有没有调用。
      

  2.   

    好像没有调用btnAdd_Click 我觉得是不是页面得EnableViewState设置问题,尽管我对
    EnableViewState不是很了解
      

  3.   

    你看看你在客户端生成的代码中一定是submit  类型,否则不会这样的,你可以用
    <input type=button id=btnSs runat=server name=btnSs>代替asp button试试
      

  4.   

    to: baya(看破尘世的愚)
    我也遇到同样的情况,以 baya(看破尘世的愚)兄的意思不能用asp:Button?
      

  5.   

    使用页面刷新事件
    Web 页的用户通常只执行几个操作,而且从某种程度上讲,执行这些操作时心情都很愉快。这些操作包括“后退”、“前进”、“停止”和“刷新”。但这些操作构成了一种 Internet 浏览器的标准工具包。截取以及细分这些操作可能会对普遍认可的 Internet 操作带来某种“局限性”。对用户可能产生负面影响。 另一方面,当用户刷新当前页面或退回到先前访问的页面时,会向服务器提交已处理过的请求,这有可能会打断应用程序状态的一致性。在这种情况下,也可能对应用程序产生负面影响。 请设想以下情况:您通过 DataGrid 显示数据,并在每一行中提供一个按钮,供用户删除所表示的数据行。尽管这是很常见的做法(轻轻点击,即可删除当前应用程序中实现的数据),但这种做法极其危险。用户很容易由于失误而单击了错误的按钮,从而破坏数据的一致性,而且如果他们在删除(不管是有意还是无意)之后刷新页面,则很可能会删除第二个行。 当您刷新页面时,浏览器只重复上次发布的内容。从 ASP.NET 运行库的角度来看,只有一个新请求要处理。ASP.NET 运行库无法区分一般的请求和意外重复的请求。如果采取脱机工作的方式,并按内存中存储的 DataSet 中的位置删除记录,则很可能会多删除一条记录。如果上一个操作以 INSERT 结束,刷新页面更有可能会添加一条记录。 这些示例清楚地暴露出某些有争议的设计问题,但它们反映了完全可能的情况。那么,阻止页面刷新最好的方式是什么呢?本文前面讨论的机制可以预处理请求,并确定是否正在刷新页面。这些信息通过 HttpContext 对象传递给页面处理程序。在页面中,开发人员可以使用以下代码检索这些数据。bool isRefresh = (bool) HttpContext.Current.Items["IsPageRefreshed"];但更好的做法是,如果使用自定义的、更有针对性的 Page 类,则可以将数据封装到一个更易于使用的属性中,即封装到 IsPageRefresh 属性中。public bool IsPageRefresh {
    get {
    object o = 
    HttpContext.Current.Items[RefreshAction.PageRefreshEntry];
    if (o == null)
    return false;
    return (bool) o; 
      }
    }通过使 Page 类继承新的、功能更丰富的基础类(本例中为 Msdn.Page),可以通过新属性了解发出请求的真正原因。以下示例显示了如何实现不应在页面刷新时重复的某个关键操作。void AddContactButton_Click(object sender, EventArgs e) {
    if (!IsPageRefresh)
    AddContact(FName.Text, LName.Text);
    BindData();
    TrackRefreshState();
    }仅当在不刷新页面时才添加新联系人,换句话说,仅当用户按照常规方式单击“Add-Contact”(添加联系人)按钮时才会添加联系人。上述代码片断中有一个很奇怪的 TrackRefreshState 方法,它的作用是什么呢?该方法更新票证计数器,并确保新页面响应包含带有最新票证的隐藏字段。在本例中,通过将会话状态中存储的值递增一来获取下一个票证。(这里只是随便使用了会话状态,最好不要使用会话状态,而使用更具扩展性的提供程序模型,就像在 ASP.NET 2.0 中一样。)但是,关于 TrackRefreshState 方法(这是有意命名的,以便于大家回想起更熟悉的 TrackViewState 方法),主要有一点要说明。通过调用该方法,除了可以添加其他信息外,还可以将带有当前请求票证的隐藏字段添加到页面响应中。如果没有隐藏字段(参见图 1),刷新机制将无法检测下一个回发是刷新还是提交。换句话说,通过在回发事件处理程序中调用 TrackRefreshState,使得系统知道您要跟踪该操作(而且只跟踪该操作),以确定是否为页面刷新。这样,您只跟踪可能会出错的页面刷新,而且并不是所有页面刷新都会在会话生命周期内发生。要利用页面刷新功能,只需在 Microsoft Visual Studio .NET 项目中添加一个新页面,然后打开内含代码文件并将页面的基础类更改为 Msdn.Page。接下来,在您执行不应刷新的操作时调用 TrackRefreshState(Msdn.Page 类的新的公共方法)。使用新的布尔属性 IsPageRefresh 检查刷新状态。
      

  6.   

    GSXiaoXiao(XiaoGS说的正确,就这样解决
      

  7.   

    我在按钮的代码中向下面这样写怎么出错了呢?
    bool isRefresh = (bool) HttpContext.Current.Items["IsPageRefreshed"];我编历了HttpContext.Current.Items集合,根本没有名为IsPageRefreshed的键值,GSXiaoXiao你是怎么得到的呢?
    MSDN里也没有IsPageRefreshed的文章