跟蹤页面执行
设置断点是页面调试过程中的常用手段除此之外还可以通过查看页面的跟蹤信息进行错误排查以及性能优化ASPNET中启用页面跟蹤非常方便只需在Page指令中加入Trace=True属性即可
<%@ Page Language=
C#
Trace=
true
>
跟蹤信息可以分为两类
a页面执行详细情况
其中主要包括页面生命周期中各事件列表控件树列表(可以查看每个控件的HTML字节数以及ViewState字节数)Session状态Application状态Cookie集合QueryString集合服务器变量等信息
b自定义跟蹤信息
通过在页面代码中调用TraceWrite()或TraceWarn()方法便可将指定内容写入跟蹤信息中的Trace Information节就算页面发生了错误跟蹤信息还是会显示出来并且在发布应用程序时无需删除相关的跟蹤代码只需从Page指令中移除Trace属性即可
在服务器端控件中添加客户端属性
我们有时会向服务器端控件中添加一些特殊的属性这类属性不需要服务器端的处理只需简单的发送至客户端即可我们不妨称其为客户端属性例如HTML属性或自定义属性(可能用于实现某种特定的JavaScript功能)可以通过以下几种方法达到这个目的
a直接向控件添加客户端属性
其中的onmouseover是客户端属性注意编译器是允许这种写法的但会显示警告
b调用内置方法
可以通过调用WebControlAttributesAdd()方法为控件添加客户端属性如下所示
MyButton
Attributes
Add(
onmouseover
this
style
cursor=
pointer
);
这也是最常用的方法
c创建自定义控件
如果某个类型的服务器端控件中经常需要添加客户端属性则可以考虑创建一个继承自该服务器端控件的自定义控件其中包含特定的客户端属性
正是考虑到这一点ASPNET 中为按钮控件(包括ButtonLinkButtonImageButton控件)提供了OnClientClick属性可以这样写
MyButton
OnClientClick =
alert(
Hello!
)
;
真是贴心的功能!
表单数据的服务器端验证
将数据验证任务从服务器端迁移到客户端的过程促使了JavaScript的产生这也是我们沿用至今的一种方式但只有在保证客户端JavaScript正常运行的前提下这种方式才能发挥其作用不幸的是总有一些例外比如浏览器不支持JavaScript或者用户刻意关闭了浏览器的JavaScript功能这就导致了第一重防护失效比较保险的做法是加入第二重防护即对用户提交的数据进行服务器端验证但这无疑将增加开发者的工作量
ASPNET 提供了一系列表单数据验证控件可以非常轻松的完成客户端及服务器端的双重数据验证任务但要使服务器端验证功能发挥作用还需要用到PageIsValid属性请看下面的例子
姓名 ator ID=RequiredFieldValidator ControlToValidate=txtName ErrorMessage=请填写姓名! Display=Dynamic runat=server>
这是一个HTML片段其中有一个RequiredFieldValidator控件用于检查是否已填写姓名下面是点击按钮时执行的服务器端代码:
protected void btnSubmit_Click(object sender EventArgs e){if (PageIsValid) //注意不要遗漏对PageIsValid属性的判断{ResponseWrite(你的名字是 + txtNameText);}}
其中要特别注意对PageIsValid属性的判断只有页面中所有验证控件对数据的验证都成功时PageIsValid属性才为True这代表提交的数据为有效数据可以进入下一步操作
跳过表单验证
在某些情况下我们需要跳过表单中所有控件的验证然而在另外一些情况下我们却希望有选择的触发表单中某些控件的验证功能分别来看看这两种情况
a跳过所有验证
假设有个表单其中除了各种数据录入控件外还有两个按钮一个是提交按钮另一个是取消按钮同时表单中还有一些数据验证控件我们希望当点击取消按钮的时候无需验证表单中数据的有效性而是直接将页面提交至服务器并将其重定向到某个指定页面
要实现这个功能可以利用按钮控件(包括ButtonLinkButtonImageButton控件)的CausesValidation属性将该属性设为false即可跳过表单中的所有验证
b触发某些验证
假设有个表单被划分成两个功能区一个用于用户登录另一个用于用户注册我们希望当点击登录按钮时只触发登录区的数据验证当点击注册按钮时只触发注册区的数据验证
解决办法是将相关的数据验证控件和数据提交控件(按钮控件)加入同一个验证组这一点是通过将各相关控件的ValidationGroup属性设为相同的值来实现的
保持滚动条位置
假设有个页面其中以列表形式显示了一些数据记录每次编辑其中的记录时都需要向服务器提交页面为了提供良好的用户体验我们希望每次编辑一条记录并保存后滚动条位置都能保持不变传统的做法是每次提交页面时将当前滚动条所在位置信息按某种方式(Hidden字段或QueryString)传给服务器端当页面返回客户端时由服务器端根据传入的位置信息以JavaScript形式重新设置滚动条位置
如果通过ASPNET来实现这一功能将变得非常简单只需在Page指令中加入MaintainScrollPositionOnPostback=true属性即可
<%@ Page Language=
C#
MaintainScrollPositionOnPostback=
true
>
禁用不必要的ViewState
在ASPNET的运行机制中ViewState起着重要的作用ViewState经过编码后存入表单Hidden字段每当页面回传至服务器时再进行解码因此ViewState的使用会带来两个问题带宽的占用以及计算资源的消耗好在不是所有控件都需要启用ViewState我们完全可以禁用不必要的ViewState
ViewState默认是开启的需要手动关闭
a禁用页面ViewState
在Page指令中加入EnableViewState=false属性即可
<%@ Page Language=
C#
EnableViewState=
false
>
加入这个属性后整个页面以及其中的所有控件都将无法使用ViewState因此需谨慎使用
b禁用控件ViewState
这是推荐的方式将控件的EnableViewState属性设为False即可禁用其ViewState这里有个简单的窍门
如果某个控件的状态不能由操作者改变则可以禁用其ViewState最典型的莫过于Label控件了只能显示信息无法操作
但TextBoxDorpDownList等控件的状态是可以改变的(通过输入选择等操作)因此保留他们的ViewState还是有用的