• .net中的FORM机制


         一直想搞清加了runat="server"的FORM和没加这个属性的FORM有啥区别,今天试验了一下,似乎搞明白了点儿东西。
        先建了一个项目,把页面中<body>的内容全删了,然后写如下几行HTML
        <body>
             <form id="mForm">
             <div>
             <label for="txtOne">messageOne:<>   
             <input type="text" id="txtOne" name="txtOne"/>
             </div>
             <div>
             <label for="txtTwo">
             <input type="text" id="txtTwo" name="txtTwo"/>
             </div>
             <input type="submit" id="  submit  "/>
             </form>
        </body>
    为了测试数据是否被提交成功,在页面的PageLoad事件处理程序中写入
        if(Request.Form["txtOne"]!=null || Request.Form["txtTwo"]!=null)
            {
                Response.write("One:"+Request.Form["txtOne"]+"<br/>");
                Response.write("Two:"+Request.Form["txtTwo"]+"</br>");
            }
    动行,在文本框中输入数据后提交,提交成功,查看页面源代码时,才发现form的action和method属性都没设置,想想才知道,action属性的默认值应该是本页,method默认的值是get。
           停止运行,然后在form里面添加runat="server"属性,再一运行,发现跟没加时一样,没有什么改变。查看一下源代码,突然发现在在输出的源代码里多了一行
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGR/8ZxOm5Tn0sfHNJaqE12hKqqJTQ==" />这个东西,嘿,这不就是传说中的viewstate吗。原来这就是.net中的FORM跟HTML中FORM的区别。
            后来又测试了几次,发现viewstate是通过HTML控件的name属性来跟踪HTML控件中的数据,这就是为什么在HTML控件中输入数据时也能显示以前曾经输入过的数据。假如FORM没有加runat="server"属性的话,HTML控件就不会有这样的效果了。如果FORM加了runat属性,则它的action属性便会失效,或者说action属性值永远为本页。
            

  • 相关阅读:
    Spark SQL (一)
    hdu 3729 最大匹配
    1350 Taxi Cab Scheme DAG最小路径覆盖
    hdu 2768 Cat vs. Dog 最大独立集 巧妙的建图
    hdu 2444 The Accomodation of Students 判断是否构成二分图 + 最大匹配
    hdu1507 最大匹配
    二分图的最大独立集 最大匹配解题 Hopcroft-Karp算法
    有向无环图的最小路径覆盖 二分图模型解题
    二分图最小点覆盖
    hdu3488 / hdu3435 / hdu1853 最小费用最大流 圈 拆点
  • 原文地址:https://www.cnblogs.com/kingclever/p/969538.html
Copyright © 2020-2023  润新知