• 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" 赋值么 :)。

  • 相关阅读:
    断点下载
    根据显示的字符多少来做Label的自适应高度
    iOS中POST异步请求
    iOS中两个APP之间的跳转和通信
    cocoapod [!] /usr/bin/curl -f -L -o /var/folders/dj/yccslvys6tb53k2vz87djfsh0000gn/T/d20170219-12508-z77a4l/file.zip https://github.com/kylefleming/opencv/releases/download/3.1.0-ios-fix/opencv2.fram
    使用webview加载html图片、表单超屏幕问题
    uiwebview 加载html时字体变小 加载前或加载后改变字体大小
    uitabbarController tababr 上方横线隐藏
    uinavigationcontroller uinavigationbar 下方横线去除
    贝赛尔曲线 绘制园
  • 原文地址:https://www.cnblogs.com/mad/p/1820623.html
Copyright © 2020-2023  润新知