WebForm生命周期

本文探讨了WebForm中启用autopostback的控件如何影响Page_Load事件,以及如何处理由此产生的交互问题。同时,解释了return语句在函数体中的作用,并详细阐述了WebForm的生命周期,包括Page_Init、Page_Load事件的触发顺序,以及验证控件和回发过程。在处理回发时,强调了Page_Load函数的重要性,并提供了防止SQL注入的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.关于WebForm环境下启用了autopostback的问题,注意,启用了autopostback的服务器控件要在修改值后按enter或tab或鼠标点击才会触发Page_Load,这一步会造成误解,如果是一个启用了autopostback的服务器控件+一个button,可能会出现点击两次button才触发button事件的感觉,但实际上第一次点击是触发autopostback的控件事件重新提交触发了Page_Load及其自身事件的原因。
这种交互体验不好。
使用一般的判断+viewstate处理了此问题
2.关于return
return仅出现于函数体中,执行return语句会中断跳出整个大函数体,而不在乎return是否在函数体中的小函数体中。
3、关于WebForm下的生命周期
浏览器提出请求-Page_Init事件触发,渲染页面框架-Page_load事件触发(不管页面是第一次被请求还是作为回发部分请求,都会触发)-验证控件Validate方法-立即反应事件_doPostBack()方法-呈现-清除
以DataInput程序comprehensive为例
第一次请求aspx:Page_Load-!isPostBack,而当使用激活了autoPostback的控件时,则为Page_Load,此时不执行!isPostBack,表示他已是回发重要的point:
凡涉及请求,都会再度执行Page_Load函数(WebForm臃肿的原因之一),而一般!isPostBack放在里面,只有那些第一次通过URL连接访问页面的才会执行
,因此,!isPostBack中的内容多为第一次加载页面时需要初始化提供的数据或其他比如验证,而且仅需要执行一次就可以
        protected void Page_Load(object sender, EventArgs e)
        {
            Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            string msg = new AntiSqlAttack(Request).CheckSqlAttach();//防止sql注入攻击
            if (!msg.Equals("N"))
            {
                LTSysAttackInfo.WriteAttackInfo(Request.ServerVariables["REMOTE_ADDR"], Request.ServerVariables["URL"].ToLower(), Request.ServerVariables["Remote_Host"], StringProcess.StrCutFrom(msg, BasicType.AttMesString));
                Response.Write(StringProcess.StrPreCut(msg, BasicType.AttMesString));
                return;
            }
            if (!IsPostBack)
            {
                //1.!IsPostBack等价于IsPostBack=false,表示页面form第一次加载,即没有发生过GET/POST请求后的页面,此时应当对登录的用户进行核对并初始化一些东西
                //2.当form表单post提交时就不是第一次回传,此时不用再核对登录用户
                if (CheckUser(Convert.ToString(Session["oaid"])))
                {
                    Initialize();
                }
                else
                    Response.Redirect(ConfigOwn.LoginPage);
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值