• ASP.NET进阶(2):IsPostBack和BindForm


    说明:本文里会使用InputId为控件的ID,InputName控件的name,InputId.Text控件的值,UrlPramaName Url参数名,BindForm()绑定表单的方法。以后还会使用一些伪代码,和这种“未声明”的代码。尽量单词达意。

    Request.Form

    可能有同学会问为什么你用Request.Form["InputName"]啊,我们都是用InputId.Text,我们只是用Request.QueryString["UrlPramaName"]来获取Url的参数值。 事实上,这两种方式都是可以的,而且通常控件生成的Html代码里Id和Name值也都是一样的(其实这并不好,以后会讲)。当点击提交按钮后,页面被重新加载,并且给控件赋了值。所以,InputId.Text就可以获取到具体控件的值。

    问题是控件是被怎么赋值的?你知道吗?

    IsPostback

    为什么页面第一次加载的时候IsPostback是false,而提交之后变成了true,我们上节不是说post也是页面请求吗,怎么两次请求,IsPostback值却有变化呢?
    当我们的form被提交后,浏览器会帮我们把form里的控件的值post到form的action所指向的页面(一般也是本身页面)。这时,IIS收到请求和Post数据后,便会知道是提交数据,而不是像第一次打开(刷新其实和第一次打开是一样的),没有数据。所以,后台类(PageName.aspx.cs)执行过程中的时候会把IsPostback设置为true! “Is Post Back”的含义即是“是否提交后(的请求)”的意思。 

    所以往往我们写按钮的Click事件时,在Page_Load方法里经常会 if(!IsPostBack) BindForm();//给表单所有控件赋值的方法。意思是提交后我就不绑定表单了,而是走Click的具体事件方法。

    为什么刷新的时候按钮没有执行click事件,而提交后就可以了呢?
    因为第一次加载(普通请求)的时候按钮的Click事件没有订阅方法,而点击提交后,按钮的Click事件订阅了具体的事件方法。就像IsPostback一样,相当于按钮的成员被赋值了。

    BindForm

    【注意】为什么不再绑定表单? 其实逛逛CSDN,大家会发现很多人都会问一个问题————为什么他明明修改了控件的值,但是提交后数据没变呢? 然后很多人回帖说,加一个IsPostback判断! 你知道为什么要加了吗? 呵呵,因为如果再次执行bindform的话,控件的值会被重新赋值,那么你再运行按钮事件时就会取到旧的值。

    那么,为什么我不执行BindForm,form在提交后(刷新了)页面的控件依然有值呢? 这不是很奇怪?
    呵呵,其实这当然是有值的了,不然你在往数据库写记录的时候InputID.Text 的数据哪里来的,而且你的BindForm不外乎就是给InputId.Text = "xxx" 赋值么 :)。

  • 相关阅读:
    js操作cookies
    努力挣钱只是不希望我的爱情受到别人金钱的考验罢了
    ASP 删除字符串开始或/和末尾处指定字符(串)
    lhgdialog 窗体之间的传值
    vs2010教程开始
    打开某些网页时IE弹出安全警告
    flex 版本问题
    【jQuery插件】用于瀑布式布局(砖块)的插件jquery Masonry
    自动根据动态的intput计算值
    js日期格式“补零”
  • 原文地址:https://www.cnblogs.com/mad/p/1820623.html
Copyright © 2020-2023  润新知