ASPNET Web窗体页面框架组件是一个可缩放的通用语言运行时编程模型它可以用于动态地生成Web页面ASPNET页面框架组件是ASP的合理进化(ASPNET提供的语法与已有的页面是兼容的)它被特意地设计用于解决早期模型中的大量的关键的缺陷特别是它提供了建立和使用可供重复使用的(reusable)UI控件的能力这些控件可以封装公用的功能从而减少了页面开发者需要编写的代码数量它使开发者能够清晰有序地构造页面逻辑(并非缠绕在一起的代码)它使用的开发工具提供了强大的WYSIWYG(所见即所得)页面设计支持能力(已有的传统ASP代码是不透明的)本文介绍ASPNET页面特性的一些基本知识
编写第一个ASPNET页面
ASPNET页面是带aspx扩展名的文本文件页面由代码和标记(tag)组成它们在服务器上动态地编译和执行为提出请求的客户端浏览器(或设备)生成显示内容它们可以被部署在IIS虚拟目录树之下当浏览器客户端请求aspx资源的时候ASPNET运行时(runtime)对目标文件进行分析并把它编译成NET框架类这个类接下来就可以用于动态地处理请求了(请注意aspx文件只在第一次被访问的时候才编译编译形成的类型实例以后供多个请求重复使用)
我们不用修改HTML文件中的代码只需要把它的扩展名改成aspx就建立了一个ASPNET页面例如下面的例子演示了一个简单的HTML页面它收集用户的姓名和类别当用户点击按钮的时候就把窗体(form)发回原页面
<form action=intro_vbaspx method=post>
<h> Name: <input id=Name type=text>
Category: <select id=Category size=>
<option>psychology</option>
<option>business</option>
<option>popular_comp</option>
</select>
<input type=submit value=Lookup>
</h>
</form>
请注意当你点击Lookup按钮的时候没有发生任何事情这是由于该aspx文件只包含了静态HTML(没有动态内容)因此相同的HTML被发回到客户端从而导致窗体字段(文本框和下拉列表)内容丢失
给页面添加简单的代码
ASPNET提供的语法与ASP页面是兼容的它支持<% %>代码呈现(render)块在aspx文件中它可以与HTML内容混合使用在页面显示的时候这些代码块会严格地执行
下面的例子演示了如何在HTML中使用<% %>呈现块(每次增加字体的尺寸)
<form action=intro_vbaspx method=post>
<h> Name: <input id=Name type=text>
Category: <select id=Category size=>
<option>psychology</option>
<option>business</option>
<option>popular_comp</option>
</select>
</h>
<input type=submit value=Lookup>
<p>
<% Dim I As Integer
For I = to %>
<font size=<%=I%>> Welcome to ASPNET </font> <br>
<% Next %>
</form>
请注意上面的例子中的<% %>代码块与ASP不同它会被真正地编译——而不是由脚本引擎来解释这改善了运行时的执行性能
ASPNET页面开发者可以使用<% %>代码块动态地修改HTML输出信息例如下面的代码演示了如何使用<% %>代码块来解释客户端发回的结果
<form action=intro_vbaspx>
<h> Name: <input name=Name type=text value=<%=HttpUtilityHtmlEncode(RequestQueryString(Name))%>>
Category: <select name=Category size=>
<%
Dim I As Integer
Dim Values() As String
Values() = psychology
Values() = business
Values() = popular_comp
For I = To ValuesLength
%>
<% If (RequestQueryString(Category) = Values(i)) %>
<option selected>
<% Else %>
<option>
<% End If %>
<%=Values(i)%>
</option>
<% Next %>
</select>
</h>
<input type=submit name=Lookup value=Lookup>
<p>
<% If (Not RequestQueryString(Lookup) = Nothing) %>
Hi <%=HttpUtilityHtmlEncode(RequestQueryString(Name)) %> you selected: <%=HttpUtilityHtmlEncode(RequestQueryString(Category)) %>
<% End If %>
</form>
请注意尽管<% %>代码块为我们定制ASPNET页面返回的文本输出信息提供了强大的途径但是它们没有提供清晰的HTML编程模型上面的例子显示仅使用<% %>代码块的开发者必须自己管理页面的状态自己截取被发送的值