asp.net_PageLoad加载页面简单理解与应用

先前关于asp.net的博客随笔都是记录一些触发事件的控件代码,即对应的控件有对应的后台代码,今天在这个基础上提升了一点点,学习了PageLoad的基本思路以及页面加载时控件执行事件的先后顺序。

开发环境:Microsoft visual Studio 2010

一、页面加载的顺序

PageLoad -> n个控件按照创建的先后顺序执行事件(DropdownList、CheckBox等等)->Button

PageLoad永远是第一个执行的,Button永远是最后执行的

二、简单的实例——实现输入一个整数n来创建n个文本框以及计算总共有多少个文本框

先上效果图:

在这里插入图片描述

由图可知,在文本框中输入一个整数,点击创建按钮,就可以创建出n个文本框,再点击“有多少文本框”按钮,就可以在多行文本框中输出文本框的总数。

前端代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test01.aspx.cs" Inherits="test01" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    &nbsp;
        <asp:Button ID="Button1" runat="server" Text="创建" onclick="Button1_Click" />
        &nbsp;
        <asp:Button ID="Button2" runat="server" Text="有多少文本框" onclick="Button2_Click" />
        &nbsp;
        <asp:Button ID="Button3" runat="server" Text="求和" onclick="Button3_Click" />
        <br />
        <br />
    <asp:Panel ID="Panel1" runat="server">
    </asp:Panel>
    <p>
        <asp:TextBox ID="TextBox2" runat="server" TextMode="MultiLine" Height="62px" 
            Width="173px"></asp:TextBox>
    </p>
    </div>
    </form>
</body>
</html>

按理来说,我们应该在各自的button按钮当中编写单独的代码,如下段:

后端代码:

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

public partial class test01 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        int index = int.Parse(TextBox1.Text);
        if (index > 0)
        {
            for (int i = 0; i < index; i++)
            {
                TextBox textbox = new TextBox();
                textbox.Text = i.ToString();
                Panel1.Controls.Add(textbox);
            }
        }
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        TextBox2.Text = Panel1.Controls.Count.ToString();
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        double total = 0;
        foreach (Control ctl in Panel1.Controls)
        {
            if (ctl is TextBox)
            {
                TextBox txt = (TextBox)ctl;
                total += double.Parse(txt.Text);
            }
        }

        Button3.Text = total.ToString();
    }
}

主要看Button1_Click方法的代码,逻辑上说没毛病,运行的时候点击创建也可以创建出来,但是当我们点击“有多少文本框”按钮的时候,就会出现创建的文本框清空了? 这是页面加载顺序的原因,上面我们说过,Button是最后执行的,那么当我们点击Button2(有多少文本框)按钮的时候,页面会重新加载,加载流程是这样的:先看PageLoad有没有东西,ok没有,继续往下看,也没有,最后执行Button2的事件,因为创建按钮没有被点击,所以没有触发事件执行,里面的代码没有跑起来,所以才会出现创建的文本框清空的情况。

那么我们怎么去解决这种情况呢?把创建按钮的代码放到PageLoad里面。因为PageLoad是永远会执行的,而其他控件则需要判断是否被点击或被操作等等因素,所以代码放在PageLoad和放在button是等价的。

改进后的代码如下:

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

public partial class test01 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        int index = 0;
        try
        {
            index = int.Parse(TextBox1.Text);
        }
        catch { }

        if (index > 0)
        {
            for (int i = 0; i < index; i++)
            {
                TextBox textbox = new TextBox();
                textbox.Text = i.ToString();
                Panel1.Controls.Add(textbox);
            }
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
     
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        TextBox2.Text = Panel1.Controls.Count.ToString();
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        double total = 0;
        foreach (Control ctl in Panel1.Controls)
        {
            if (ctl is TextBox)
            {
                TextBox txt = (TextBox)ctl;
                total += double.Parse(txt.Text);
            }
        }

        Button3.Text = total.ToString();
    }
}

try
{
index = int.Parse(TextBox1.Text);
}
catch { }
这里用try方法来防止数据报错

改进完后,文本框就不会消失了,计算文本框的功能也可以实现。

第三个按钮是求和,即求创建出来的每个文本框里面的text转换成整数之后的和。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是具体步骤: 1. 创建一个新的 ASP.NET Web 应用程序项目。 2. 打开 Default.aspx 页面,并添加 ScriptManager 控件到页面上,以便启用 ASP.NET AJAX 功能。 3. 在页面上添加一个 UpdatePanel 控件,它将负责部分更新页面,而不是整个页面。 4. 在 UpdatePanel 控件中添加一个 Label 控件,用于显示当前时间。 5. 添加一个 Timer 控件到页面上,它将定期触发一个异步回发,以便 UpdatePanel 控件可以更新 Label 控件中的时间。 下面是代码示例: ``` <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>ASP.NET AJAX 页面实时显示当前时间</title> <script type="text/javascript"> // 页面加载时启动计时器 function pageLoad() { var tmrTime = $find("<%= tmrTime.ClientID %>"); tmrTime.set_enabled(true); } </script> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Label ID="lblTime" runat="server"></asp:Label> </ContentTemplate> </asp:UpdatePanel> <asp:Timer ID="tmrTime" runat="server" Interval="1000" OnTick="tmrTime_Tick"></asp:Timer> </form> </body> </html> ``` 在 Default.aspx.cs 文件中,添加以下代码: ``` using System; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { lblTime.Text = DateTime.Now.ToString(); } } protected void tmrTime_Tick(object sender, EventArgs e) { lblTime.Text = DateTime.Now.ToString(); } } ``` 这个页面会每秒钟更新一次当前时间。当 Timer 控件触发时,它将调用 tmrTime_Tick 方法,该方法将更新 Label 控件中的时间。由于 UpdatePanel 控件将部分更新页面,因此页面不会整体刷新。 希望这个示例对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BeJav

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值