IsPostBack的问题

时间:2010-12-21 18:38:24

标签: c# .net

我有一个.aspx页面,如果点击该页面上的按钮,该页面会向客户发送一封信。单击页面调用本身,因此邮件发送类位于同一文件中。但是,我不希望在简单加载页面时发送邮件。我希望它在单击按钮时发送信件,所以,我正在尝试使用以下代码:

void page_Load(Object sender, System.EventArgs e)
{
    if (IsPostBack)
    {
        SendMail();
    }
}

但它不起作用。我做错了什么?

5 个答案:

答案 0 :(得分:1)

为什么不使用Button的{​​{1}}呢?

您所说的是仅当特定按钮为Click Event时才要发送电子邮件。那么为什么不注册它的点击事件而不是用额外的代码膨胀你的clicked

只有当该按钮的点击导致page_load时,才会引发按钮的点击事件。所以,这是你最好的选择。

答案 1 :(得分:1)

为按钮的单击事件创建一个事件处理程序(只需双击Visual Studio的Designer中的按钮)。

使用Page_Load会导致用户在任何情况下发回电子邮件,而不仅仅是按下按钮。

答案 2 :(得分:0)

看起来页面找不到Page_Load的正确事件处理程序,检查案例并将其更正为Page_Load

答案 3 :(得分:0)

看看是否有效(用以下代码替换page_Load方法):

protected override void OnLoad(System.EventArgs e)
{
    base.OnLoad(e);

    if (IsPostBack)
    {
        SendMail();
    }
}

您目前依靠AutoEventWireup功能来连接您的网页事件。这很慢且有问题,可能是您的问题的原因。我给你的方法会覆盖Page.OnLoad并且也应该纠正这个问题。

答案 4 :(得分:0)

如果您想使用服务器,每次发布页面时都会引发 Page_Load 事件,并通过回发回调进行提升你应该在按钮的点击事件中叫你 SendMail 方法的会外活动:

protected void Page_Load(object sender, EventArgs e) 
{
   if (!IsPostBack && !IsCallback)
   {
      /*occurs the first time the page is loaded*/
   }        
  if (IsPostBack)
  {
     /*occurs every time a postback is raised (e.g. by form submission) */
  }
  if (IsCallback)
  {
     /*occurs every time a callback is raised, e.g. by generating callbacks by means of AJAX/
  }
}
protected void  SendMail_Click(object sender, EventArgs e) { SendMail(); }

阅读MSDN:ASP.NET Page Life Cycle