代码清单5中的Button控件包含一个OnClientClick属性,在客户端点击该按钮时,执行JavaScript脚本。该脚本显示一个确认对话框。如果确认对话框返回False,那么取消按钮点击事件,包含该按钮的表单也不会传回服务器端。
像大多数ASP.NET控件一样,Button控件支持扩展属性,只需简单地为控件添加任意的属性,就可以处理其他的客户端事件。如果ASP.NET Framework不能识别控件上声明的属性,框架只会简单地把这个属性传给浏览器。
例如,代码清单6中的页面包含一个拥有onmouseover和onmouseout属性的控钮控件。把鼠标悬停在按钮上,按钮上的文字就会改变。
代码清单6 ButtonExpando.aspx
复制代码 代码如下:
<form runat="server">
<div>
<asp:Button Text="Submit" Runat="server" />
</div>
</form>
注解:在Visual Web Developer中,扩展属性下面会出现绿色波浪线警告,不过可以安全地忽视这个警告。
五、执行跨页面发送
默认情况下,点击一个按钮控件,就会把包含这个控件的页面提交回该页面本身并重新加载相同页面。不过,可以使用PostBackUrl属性把表单数据提交到其他页面。
例如,代码清单7包含一个搜索表单。该页中的按钮把页面提交到名叫ButtonSearchResult. aspx的另一个页面。代码清单8包含了ButtonSearchResult.aspx页面。
代码清单7 ButtonSearch.aspx
复制代码 代码如下:
<form runat="server">
<div>
<asp:Label Text="Search:" Runat="server" />
<asp:TextBox Runat="server" />
<asp:Button Text="Go!" PostBackUrl="ButtonSearchResults.aspx" Runat="server" />
</div>
</form>
代码清单8 ButtonSearchResults.aspx
复制代码 代码如下:
<form runat="server">
<div>
<asp:Label Runat="server" />
</div>
</form>
在代码清单8的Page_Load事件处理程序中,PreviousPage属性用来得到前一个页面的引用(代码清单7中的ButtonSearch.aspx页面)。其次,FindControl()方法用于从前页面中获取TextBox控件的txtSearch。最后,输入在该TextBox中的值显示在页面中的Label中。
作为使用FindControl()方法从前页面中获取某个控件的替代方法,可以通过页面属性来暴露控件。代码清单9中的页面通过SearchString属性暴露了TextBox txtSearch。这个页面将表单数据发送到代码清单10中的ButtonSearchResultTyped.aspx页面。
代码清单9 ButtonSearchTyped.aspx
复制代码 代码如下:
<form runat="server">
<div>
<asp:Label Text="Search:" Runat="server" />
<asp:TextBox Runat="server" />
<asp:Button Text="Go!" PostBackUrl="ButtonSearchResultsTyped.aspx" Runat="server" />
</div>
</form>
代码清单10 ButtonSearchResultTyped.aspx
复制代码 代码如下:
<form runat="server">
<div>
<asp:Label Runat="server" />
</div>
</form>
注意,代码清单10中的页面包含一个<%@ PreviousPageType %>指令。这个指令把PreviousPage属性返回的值转换成ButtonSearchTyped类的实例。如果没有这个指令,PreviousPage属性会把前页面作为通用的Page类的实例返回。
执行跨页面提交时,可以使用下面两种方法中的任意一种方法。第一种方法提供从前页面获取值的弱类型方法,第二种方法提供强类型方法。
六、指定默认按钮
可以使用服务器端Form控件的DefaultButton属性来指定表单的默认按钮。指定一个默认按钮,就可以按键盘上的回车键来调用这个按钮。
例如,代码清单11中的页面包含一个简单的搜索表单。<form>标签设置页面的默认按钮为Button控件的btnSearch。
代码清单11 ButtonDefaultButton.aspx
复制代码 代码如下:
<form defaultbutton="btnSearch" runat="server">
<div>
<asp:Label Text="Search:" AssociatedControlID="txtSearch" Runat="server" />
<asp:TextBox Runat="server" />
<asp:Button Text="Search" Runat="server" />
<asp:Button Text="Cancel" Runat="server" /> <hr />
<asp:Label Runat="server" />
</div>
</form>