关于 的认识与迷茫

时间:2021-08-08 00:32:23
这已经不是一个新鲜的问题。很多帖子都说到过类似情况。本帖没有什么技术含量,下面对于编程习惯和优劣编程想说下希望朋友能给解答下。
<form id="form1" runat="server">它的用处自己理解不深。只认为它是post,form获取控件的值的。
对于一个加有<form id="form1" runat="server">的aspx页面在ie浏览时源码是会出现不少


    <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1NTY1NzQ0NjEPZBYCAgMPZBYEAgEPEA8WAh4LXyFEYXRhQm91bmRnZBAVCQ4tLeivt+mAieaLqS0tIAJDQQJJTgJLUwJNRAJNSQJPUgJUTgJVVBUJDi0t6K+36YCJ5oupLS0gAkNBAklOAktTAk1EAk1JAk9SAlROAlVUFCsDCWdnZ2dnZ2dnZ2RkAgMPPCsADQEADxYEHwBnHgtfIUl0ZW1Db3VudAIBZBYCZg9kFgQCAQ9kFgYCAQ8PFgIeBFRleHQFCzcyMi01MS01NDU0ZGQCAg9kFgICAQ8PFgIfAgUIRGVGcmFuY2VkZAIDD2QWAgIBDw8WAh8CBQZNaWNoZWxkZAICDw8WAh4HVmlzaWJsZWhkZBgBBQlzdGF0ZUxpc3QPPCsACQEIAgFkZy+C849rr/HMX2P/keJkl/3wO6Y=" />
</div>


似类乱码的东西。自己工作的范围也有网页重构部分。对于在xhtml页面中看到上面这些代码心里总是不舒服。在CRUD功能比较多的情况用asp编程时也习惯于传递到其它页面来处理CRUD。感觉更清析。
1:
加上<form name="form1" method="post" action="Default.aspx" id="form1">后。在.cs里面可以直接操作。工作效率是很有优势的。但对于生成貌似于垃圾代码的代码也很烦感。.NET中的很多控件都是会生成貌似于垃圾代码的代码。
2:如果不加上<form name="form1" method="post" action="Default.aspx" id="form1"> 采用html 控件来做。工作效率会差吧。编程难度也会增加。但xhtml代码干净。这种方法我没有试过。自己没那水平
3:NET DZ 这个项目用到了模板。xhtml输出也是很干净的。自己水平不行源码也别看了。想知道他是怎么来实现的

三种情况我目前只能选择1.希望朋友帮着解答下。我目前所认识的有哪些不足。还有对于2, 3两项朋友也给简述下。不奢望朋友们给完全的解答、谢谢

12 个解决方案

#1


同感。
很多认为理所当然的应该用,就是不知道意思..
帮顶!!

#2


你这些所谓类似乱码的东西,不是由form产生的,是由于启用了ViewState产生的

#3


记录了postback以后此页面的viewstate控件保存的值

#4


没有那些 隐藏字段 asp.net 还干个吊啊

#5


ViewState 

1. 很奇怪,楼主能提到 CRUD 这个所写,不了解 __VIEWSTATE 这个 hidden ? ASP.NET 新手 ? 那,我假设你至少熟悉 ASP/JSP/PHP/.... 吧

2. ViewState 是每个每个 ASP.NETer 的必修课,如果你没有什么预备知识,建议你先看看MSDN,如
ASP.NET 视图状态概述 

3. 可以先偷偷告诉你的是:-D,
实际上,ViewState 是经典 ASP 中 hidden 中的用法,以及如下常见用法:
<input type=text name=txtFirstName  value='<% Request.Form["txtFirstName"] %>' /> 

4. 当然这个 __VIEWSTATE 包含多个 input 类似表单元素以及非input(如label)甚至没有控件对应的值,内部由 ASP.NET 负责存储以及恢复,至于如何....
这是自定义控件开发的一节重要课程,如果你感兴趣可以参考相关书籍,如  ASP.NET 2.0服务器控件与组件开发高级编程

5. 那为什么看起来是乱码?你把密码都存入 hidden 了,我当然加密一下?然而,这个默认的加密方法并没有任何安全可言!仅仅能算是编码!用Base64!为了更多为了传输的目的。知道 BASE64 的起源不? baidu,plz.

#6


晓风在找工作?

#7


__EVENTTARGET 与 __EVENTARGUMENT

1. 客户端

请在页面放入一个 Button(加入你是asp.net2.0+,UsesSumitBehavior=false),DropDownList(设置AutoPostBack=true),
运行,查看源码,思考下面的  __doPostBack,明白了吗?

form.submit(); 这个函数 classic asp 中是不是经常使用?asp.net 开发为什么效率高?就因为她在幕后默默为我们做了这么多工作.......

<script type="text/javascript"> 
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function  __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

<input type="button" name="Button1" value="Button" onclick="javascript: __doPostBack('Button1','')" id="Button1" />
        <select name="DropDownList1" onchange="javascript:setTimeout(' __doPostBack(\'DropDownList1\',\'\')', 0)" id="DropDownList1">


2. 服务器
好,从上面知道页面是如何post,但是仅仅是客户端事件啊,那么Button到底如何触发服务器端事件?说俗点就是如何调用服务器端代码?
说来又话长了....略去N多关于C#/VB.net 事件、委托....单从 http 协议角度猜,asp.net 引擎通过 Request.Form["__EVENTTARGET"] 判断来是哪个控件引起的PostBack,并调用其对应的服务器端事件处理程序(就是类似 Button_Click(object sender, EventArgs e) )

3. 至于 __EVENTARGUMENT 这个使用场景比较少,主要用在符合控件,如 GridView ,TreeView 等,

4. 至于 UsesSumitBehavior=true (asp.net 2.0+引入)又什么不同,如果上面的经典 postback (asp。net1.x就支持),那么这个就不是问题了


Hope helpful

#8


好,从上面知道页面是如何post,但是仅仅是客户端事件啊,那么Button到底如何触发服务器端事件?说俗点就是如何调用服务器端代码?
说来又话长了....略去N多关于C#/VB.net 事件、委托....单从 http 协议角度猜,asp.net 引擎通过 Request.Form["__EVENTTARGET"] 判断来是哪个控件引起的PostBack,并调用其对应的服务器端事件处理程序(就是类似 Button_Click(object sender, EventArgs e) )

===========

这里需要补充的是,实际我们 不要去深究到底 __doPostBack  函数如何与 Button_Click(object sender, EventArgs e) 挂够起来,
这是 ASP.NET Engine 要干的活,理解就行了。有空捣鼓捣鼓就可以,为你哪天自己开发个 ASP# 做准备倒是可以 O(∩_∩)O哈哈~
在这,关于  ASP.NET 生命周期 很重要,理解控件如何构建,假如你不想成为一名傻瓜式ASP.NETer!

#9


@高歌

契约期马上到了,想挪挪地方了,希望这么一个大寒冬里稍微一挪不会翘辫子 :-D

#10


向楼上的学习了

#11


该回复于2011-05-09 16:10:12被版主删除

#12


<form id="form1" runat="server">应该是模板吧,我不明白form1到底是什么模板。我是一个初学者,虽然问题很简单但是还是不明白,希望帮忙讲解一下。

#1


同感。
很多认为理所当然的应该用,就是不知道意思..
帮顶!!

#2


你这些所谓类似乱码的东西,不是由form产生的,是由于启用了ViewState产生的

#3


记录了postback以后此页面的viewstate控件保存的值

#4


没有那些 隐藏字段 asp.net 还干个吊啊

#5


ViewState 

1. 很奇怪,楼主能提到 CRUD 这个所写,不了解 __VIEWSTATE 这个 hidden ? ASP.NET 新手 ? 那,我假设你至少熟悉 ASP/JSP/PHP/.... 吧

2. ViewState 是每个每个 ASP.NETer 的必修课,如果你没有什么预备知识,建议你先看看MSDN,如
ASP.NET 视图状态概述 

3. 可以先偷偷告诉你的是:-D,
实际上,ViewState 是经典 ASP 中 hidden 中的用法,以及如下常见用法:
<input type=text name=txtFirstName  value='<% Request.Form["txtFirstName"] %>' /> 

4. 当然这个 __VIEWSTATE 包含多个 input 类似表单元素以及非input(如label)甚至没有控件对应的值,内部由 ASP.NET 负责存储以及恢复,至于如何....
这是自定义控件开发的一节重要课程,如果你感兴趣可以参考相关书籍,如  ASP.NET 2.0服务器控件与组件开发高级编程

5. 那为什么看起来是乱码?你把密码都存入 hidden 了,我当然加密一下?然而,这个默认的加密方法并没有任何安全可言!仅仅能算是编码!用Base64!为了更多为了传输的目的。知道 BASE64 的起源不? baidu,plz.

#6


晓风在找工作?

#7


__EVENTTARGET 与 __EVENTARGUMENT

1. 客户端

请在页面放入一个 Button(加入你是asp.net2.0+,UsesSumitBehavior=false),DropDownList(设置AutoPostBack=true),
运行,查看源码,思考下面的  __doPostBack,明白了吗?

form.submit(); 这个函数 classic asp 中是不是经常使用?asp.net 开发为什么效率高?就因为她在幕后默默为我们做了这么多工作.......

<script type="text/javascript"> 
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function  __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

<input type="button" name="Button1" value="Button" onclick="javascript: __doPostBack('Button1','')" id="Button1" />
        <select name="DropDownList1" onchange="javascript:setTimeout(' __doPostBack(\'DropDownList1\',\'\')', 0)" id="DropDownList1">


2. 服务器
好,从上面知道页面是如何post,但是仅仅是客户端事件啊,那么Button到底如何触发服务器端事件?说俗点就是如何调用服务器端代码?
说来又话长了....略去N多关于C#/VB.net 事件、委托....单从 http 协议角度猜,asp.net 引擎通过 Request.Form["__EVENTTARGET"] 判断来是哪个控件引起的PostBack,并调用其对应的服务器端事件处理程序(就是类似 Button_Click(object sender, EventArgs e) )

3. 至于 __EVENTARGUMENT 这个使用场景比较少,主要用在符合控件,如 GridView ,TreeView 等,

4. 至于 UsesSumitBehavior=true (asp.net 2.0+引入)又什么不同,如果上面的经典 postback (asp。net1.x就支持),那么这个就不是问题了


Hope helpful

#8


好,从上面知道页面是如何post,但是仅仅是客户端事件啊,那么Button到底如何触发服务器端事件?说俗点就是如何调用服务器端代码?
说来又话长了....略去N多关于C#/VB.net 事件、委托....单从 http 协议角度猜,asp.net 引擎通过 Request.Form["__EVENTTARGET"] 判断来是哪个控件引起的PostBack,并调用其对应的服务器端事件处理程序(就是类似 Button_Click(object sender, EventArgs e) )

===========

这里需要补充的是,实际我们 不要去深究到底 __doPostBack  函数如何与 Button_Click(object sender, EventArgs e) 挂够起来,
这是 ASP.NET Engine 要干的活,理解就行了。有空捣鼓捣鼓就可以,为你哪天自己开发个 ASP# 做准备倒是可以 O(∩_∩)O哈哈~
在这,关于  ASP.NET 生命周期 很重要,理解控件如何构建,假如你不想成为一名傻瓜式ASP.NETer!

#9


@高歌

契约期马上到了,想挪挪地方了,希望这么一个大寒冬里稍微一挪不会翘辫子 :-D

#10


向楼上的学习了

#11


该回复于2011-05-09 16:10:12被版主删除

#12


<form id="form1" runat="server">应该是模板吧,我不明白form1到底是什么模板。我是一个初学者,虽然问题很简单但是还是不明白,希望帮忙讲解一下。