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);
}
}