ServerClick事件触发Page.Load

时间:2015-01-03 11:30:53

标签: asp.net vb.net

最近我意识到asp.net中存在一个问题,这对我来说有点奇怪。

我收到了sample.aspx个文件:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="sample.aspx.vb" Inherits="SampleProj.sample" MasterPageFile="~/Site.Master" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <input type="image" id="Accept" runat="server" class="accept-btn" src="/Images/accept.png" />
</asp:Content>

相关的代码隐藏文件sample.aspx.vb

Public Class sample
   Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Some code here
End Sub

Private Sub Accept_ServerClick(sender As Object, e As ImageClickEventArgs) Handles Accept.ServerClick
'Some code here
End Sub

所以我的问题很容易解释:单击“接受”按钮后,Accept.ServerClick事件会按预期触发,但出于某种原因(即使页面未重新加载),Page.Load事件也会被触发。这是我的第一个asp项目,也许这是预期的行为,但我既没有解释也没有找到禁用它的方法。任何信息都将不胜感激。

问候,Ohemgi

(如果你发现任何错误,这是由编写这个简短的样本引起的。我的代码编译运行没有问题,所以我的问题只是关于load事件)

2 个答案:

答案 0 :(得分:2)

这很好。来自 MSDN 文档:

  

在回发页面后,会引发页面的初始化事件(Page_Init和Page_Load),然后处理控件事件。

如果您在Page_Load中执行了每次单击按钮时不想执行的操作,只需将其包装在此条件下:

if (!Page.IsPostBack)
{
    // Some code here. It is executed only once.
}

您可以在以下链接中找到更多信息:

  1. ASP.NET Web Server Control Event Model
  2. ASP.NET Page Life Cycle Overview

答案 1 :(得分:1)

VB.Net版

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        ' Some code here. It is executed only once.
    End If
End Sub