Asp+ Web Forms

---摘自互联网
ASP + Web Forms ，一个微软的新名词，照它自己的话说ASP+ Web Forms页面框架是一个可升级的NGWS runtime编程模型，可以在服务器上动态产生网页。不太好懂是吗，其实说白了，和HTML的表单一样，但它可以在服务器端动态改变，而不象静态HTML表单那样一旦生成就无法改变，当然，用DHTML或remotescript也可以做到动态改变，但毕竟不是很方便。那么，究竟Web Forms是个什么样呢？其实你已经见过了，记得上次我给的那个例子吗，没错，那就是一个Web Forms ，不过由于那个例子里全是静态HTML，所以当你按下”lookup”按钮时只不过是提交一次表单而已，什么都没有发生，现在让我们来看一个真正意义上的Web Forms ，它带有一个广告轮换控制，一个文本输入框，一个选择框、一个按钮和一个文本标签，代码如下。
File : Intro6.aspx
<html>
<head>
<link rel="stylesheet"href="intro.css">
</head>
<script language="C#" runat=server>
void SubmitBtn_Click(Object sender, EventArgs e) {
Message.Text = "Hi " + Name.Text + ", you selected: " + Category.SelectedItem;
}
</script>
<body>
<center>
<form action="intro6.aspx" method="post" runat="server">
<asp:adrotator AdvertisementFile="ads.xml" BorderColor="black" BorderWidth=1 runat="server"/>
<h3> Name: <asp:textbox id="Name" runat="server"/>
Category: <asp:dropdownlist id="Category" runat=server>
<asp:listitem>psychology</asp:listitem>
<asp:listitem>business</asp:listitem>
<asp:listitem>popular_comp</asp:listitem>
</asp:dropdownlist>
<asp:button type=submit text="Lookup" OnClick="SubmitBtn_Click" runat="server"/>
<p>
<asp:label id="Message" runat="server"/>
</form>
</center>
</body>
</html>
好了，现在我们来具体看一下这个ASP+ 程序和ASP到底有什么不同，首先你可能注意到，原来asp的<% %>脚本定界符不见了，取而代之的是<script language=…>，说实话，原来我最痛恨的就是这个<% %>了，尤其是在HTML中混用的时候，简直不象一种编程语言，你要从这样一段程序里看出程序流程来，简直比登天还难，现在好了。当然这不是说你现在不能用<% %>，毕竟它是向前兼容asp的嘛，不过我还是尽量少用为妙。看下面一段：
<script language="C#" runat=server>
void SubmitBtn_Click(Object sender, EventArgs e) {
Message.Text = "Hi " + Name.Text + ", you selected: " + Category.SelectedItem;
}
</script>
用过C的朋友是不是觉得很熟悉？没错，这是用C#写的一个事件处理函数，void SubmitBtn_Click(Object sender , EventArgs e) ，你可能一看就明白了，void代表该函数没有返回值，该函数带有两个参数， 代码只有一行，你可能注意到这行代码中的Message、Name、Category你并没有定义，那么它们从哪里来的呢？看下面的代码：
<form action="intro6.aspx" method="post" runat="server">
<asp:adrotator AdvertisementFile="ads.xml" BorderColor="black" BorderWidth=1 runat="server"/>
<h3> Name: <asp:textbox id="Name" runat="server"/>
Category: <asp:dropdownlist id="Category" runat=server>
<asp:listitem>psychology</asp:listitem>
<asp:listitem>business</asp:listitem>
<asp:listitem>popular_comp</asp:listitem>
</asp:dropdownlist>
<asp:button type=submit text="Lookup" OnClick="SubmitBtn_Click" runat="server"/>
<p>
<asp:label id="Message" runat="server"/>
</form>
这个表单的写法和html表单完全不同了吧？首先，所有的表单项包括表单本身后面都加上了runat=server，这句话的意思就是说这个是服务器端控制项，另外象传统表单的什么<input type=text>等的写法都变了，你仔细观察一下可以看出，原来的文本框变为<asp:textbox>，选择框变为<asp:dropdownlist> , 选择框选项变为<asp:listitem>，而submit按钮变为<asp:button>，这个按钮对应的控制函数就刚才我提到的那个SubmitBtn_Click函数，它是运行在服务器端的。另外还有一个服务器端控制<asp:label id=”Message” runat=”server”/>，这个asp:label是传统表单所没有的，它是一个服务器端文本控制，那么就存在一个问题，如果传统的HTML里没有这个元素，那么ASP+是怎么接收的呢？你运行一下这个程序，然后看一下HTML源码，你会发现这么一行：
<INPUT type="hidden" name="__VIEWSTATE" value="a0z-1715863018__x">
对，ASP+就是通过这个隐藏表单的形式传递过去的。
在<form>标记下有这么一行代码：
<asp:adrotator AdvertisementFile="ads.xml" BorderColor="black" BorderWidth=1 runat="server"/>
asp:adrotator，这也是一个服务器端控制，看名字你就知道了，广告轮换嘛，不过相对ASP，它现在不是使用内置组件，而是作为一个服务器端控制，控制它显示的就是这个ads.xml，代码如下：
file ads.xml:
<Advertisements>
<Ad>
<ImageUrl>/quickstart/aspplus/images/banner1.gif</ImageUrl>
<TargetUrl>http://www.microsoft.com</TargetUrl>
<AlternateText>Alt Text</AlternateText>
<Keyword>Computers</Keyword>
<Impressions>80</Impressions>
</Ad>
<Ad>
<ImageUrl>/quickstart/aspplus/images/banner2.gif</ImageUrl>
<TargetUrl>http://www.microsoft.com</TargetUrl>
<AlternateText>Alt Text</AlternateText>
<Keyword>Computers</Keyword>
<Impressions>80</Impressions>
</Ad>
<Ad>
<ImageUrl>/quickstart/aspplus/images/banner3.gif</ImageUrl>
<TargetUrl>http://www.microsoft.com</TargetUrl>
<AlternateText>Alt Text</AlternateText>
<Keyword>Computers</Keyword>
<Impressions>80</Impressions>
</Ad>
</Advertisements>
自己看一下吧，我就不详细解释了。
好了，现在再运行一遍这个程序，好好体会一下它与asp的区别，准备下次的内容。