zoukankan      html  css  js  c++  java
  • .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属性值永远为本页。
            

  • 相关阅读:
    状态保持 session和cookie
    情人节——爱心代码
    Python常见的内置函数
    django
    面向对象和面向过程
    字符串的常见操作
    常见的数据类型
    Flask
    阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4
    python中json和dict的基本区别
  • 原文地址:https://www.cnblogs.com/kingclever/p/969538.html
Copyright © 2011-2022 走看看