1.跟踪页面执行
      设置断点是页面调试过程中的常用手段,除此之外,还可以通过查看页面的跟踪信息进行错误排查以及性能优化。ASP.NET中启用页面跟踪非常方便,只需在Page指令中加入Trace="True"属性即可:

<%@ Page Language="C#" Trace="true">

跟踪信息可以分为两类:
      a.页面执行详细情况
      其中主要包括页面生命周期中各事件列表、控件树列表(可以查看每个控件的HTML字节数以及ViewState字节数)、Session状态、Application状态、Cookie集合、QueryString集合、服务器变量等信息。
      b.自定义跟踪信息
      通过在页面代码中调用Trace.Write()或Trace.Warn()方法便可将指定内容写入跟踪信息中的"Trace Information"节。就算页面发生了错误,跟踪信息还是会显示出来,并且在发布应用程序时无需删除相关的跟踪代码,只需从Page指令中移除Trace属性即可。

2.在服务器端控件中添加客户端属性
      我们有时会向服务器端控件中添加一些特殊的属性,这类属性不需要服务器端的处理,只需简单的发送至客户端即可,我们不妨称其为客户端属性,例如HTML属性或自定义属性(可能用于实现某种特定的JavaScript功能)。可以通过以下几种方法达到这个目的:
      a.直接向控件添加客户端属性

<asp:Button ID="MyButton" Text="ClickMe" onmouseover="this.style.cursor='pointer'" runat="server" />

其中的onmouseover是客户端属性,注意,编译器是允许这种写法的,但会显示警告。
      b.调用内置方法
      可以通过调用WebControl.Attributes.Add()方法为控件添加客户端属性,如下所示:

MyButton.Attributes.Add("onmouseover", "this.style.cursor='pointer'");

这也是最常用的方法。
      c.创建自定义控件
      如果某个类型的服务器端控件中经常需要添加客户端属性,则可以考虑创建一个继承自该服务器端控件的自定义控件,其中包含特定的客户端属性。
      正是考虑到这一点,ASP.NET 2.0中为按钮控件(包括Button、LinkButton、ImageButton控件)提供了OnClientClick属性,可以这样写:

MyButton.OnClientClick = "alert('Hello!')";

真是贴心的功能!

3.表单数据的服务器端验证
      将数据验证任务从服务器端迁移到客户端的过程促使了JavaScript的产生,这也是我们沿用至今的一种方式。但只有在保证客户端JavaScript正常运行的前提下,这种方式才能发挥其作用。不幸的是,总有一些例外,比如浏览器不支持JavaScript,或者用户刻意关闭了浏览器的JavaScript功能,这就导致了第一重防护失效。比较保险的做法是加入第二重防护,即对用户提交的数据进行服务器端验证,但这无疑将增加开发者的工作量。
      ASP.NET 2.0提供了一系列表单数据验证控件,可以非常轻松的完成客户端及服务器端的双重数据验证任务。但要使服务器端验证功能发挥作用,还需要用到Page.IsValid属性,请看下面的例子:

<form id="MyForm" runat="server">
  <div>
    姓名:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>&nbsp;<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="txtName" ErrorMessage="请填写姓名!" Display="Dynamic" runat="server"></asp:RequiredFieldValidator>
  </div>
  <div>
    <asp:Button ID="btnSubmit" Text="提交" runat="server" />
  </div>
</form>

这是一个HTML片段,其中有一个RequiredFieldValidator控件用于检查是否已填写姓名。下面是点击按钮时执行的服务器端代码:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    if (Page.IsValid) //注意:不要遗漏对Page.IsValid属性的判断
    {
        Response.Write("你的名字是:" + txtName.Text);
    }
}

其中,要特别注意对Page.IsValid属性的判断,只有页面中所有验证控件对数据的验证都成功时,Page.IsValid属性才为True,这代表提交的数据为有效数据,可以进入下一步操作。

      4.跳过表单验证
      在某些情况下,我们需要跳过表单中所有控件的验证,然而在另外一些情况下,我们却希望有选择的触发表单中某些控件的验证功能。分别来看看这两种情况:
      a.跳过所有验证
      假设有个表单,其中除了各种数据录入控件外还有两个按钮,一个是提交按钮,另一个是取消按钮,同时表单中还有一些数据验证控件。我们希望当点击取消按钮的时候无需验证表单中数据的有效性,而是直接将页面提交至服务器并将其重定向到某个指定页面。
      要实现这个功能,可以利用按钮控件(包括Button、LinkButton、ImageButton控件)的CausesValidation属性,将该属性设为false即可跳过表单中的所有验证。
      b.触发某些验证
      假设有个表单,被划分成两个功能区,一个用于用户登录,另一个用于用户注册,我们希望当点击登录按钮时只触发登录区的数据验证,当点击注册按钮时只触发注册区的数据验证。
      解决办法是将相关的数据验证控件和数据提交控件(按钮控件)加入同一个验证组,这一点是通过将各相关控件的ValidationGroup属性设为相同的值来实现的。

      5.保持滚动条位置
      假设有个页面,其中以列表形式显示了一些数据记录,每次编辑其中的记录时都需要向服务器提交页面,为了提供良好的用户体验,我们希望每次编辑一条记录并保存后,滚动条位置都能保持不变。传统的做法是每次提交页面时将当前滚动条所在位置信息按某种方式(Hidden字段或QueryString)传给服务器端,当页面返回客户端时,由服务器端根据传入的位置信息以JavaScript形式重新设置滚动条位置。
      如果通过ASP.NET来实现这一功能将变得非常简单,只需在Page指令中加入MaintainScrollPositionOnPostback="true"属性即可:

<%@ Page Language="C#" MaintainScrollPositionOnPostback="true">

 
     6.禁用不必要的ViewState

      在ASP.NET的运行机制中,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控件了,只能显示信息,无法操作。
      但TextBox、DorpDownList等控件的状态是可以改变的(通过输入、选择等操作),因此保留他们的ViewState还是有用的。

转载于:https://www.cnblogs.com/shiyuan/archive/2009/07/10/1520347.html

[转]ASP.NET实用技巧相关推荐

  1. 艾伟:ASP.NET实用技巧(一)

    本文主要介绍ASP.NET编程中的一些常用方法,内容涉及代码技巧.性能优化等方面.       1.跟踪页面执行      设置断点是页面调试过程中的常用手段,除此之外,还可以通过查看页面的跟踪信息进 ...

  2. mysql每一行数据类型_MySQL_MySQL编程中的6个实用技巧,每一行命令都是用分号(;)作为 - phpStudy...

    MySQL编程中的6个实用技巧 每一行命令都是用分号(;)作为结束 对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的 ...

  3. 我的新书 asp net开发技巧精讲

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 搜    ...

  4. flash 与html,Flash 与 html 的一些实用技巧

    Flash 与 html 的一些实用技巧 更新时间:2006年11月23日 00:00:00   作者: 随着Flash的日益普及, Flash在WEB开发上面可是大显身手,既然是WEB-Site,那 ...

  5. ASP.NET 实用资料[转]

    使用SqlBulkCopy类加载其他源数据到SQL表  在数据回发时,维护ASP.NET Tree控件的位置  vagerent的vs2005网站开发技巧  ASP.NET2.0小技巧--内部控件权限 ...

  6. Docker实用技巧之更改软件包源提升构建速度

    一.开篇 地球,中国,成都市,某小区的阳台上,一青年负手而立,闭目沉思,阵阵的凉风吹得他衣衫呼呼的飘.忽然,他抬起头,刹那间,睁开了双眼,好似一到精光射向星空,只见这夜空......一颗星星都没有.他 ...

  7. 深度学习11个实用技巧

    深度学习11个实用技巧 深度学习工程师George Seif发表了一篇博文,总结了7个深度学习的技巧,本文增加了几个技巧,总结了11个深度学习的技巧,主要从提高深度学习模型的准确性和速度两个角度来分析 ...

  8. 【老鸟分享】Linux命令行终端提示符多种实用技巧!

    1.Linux命令行提示符简介 众所周知,Linux命令行是系统管理员管理Linux的重要手段,我们管理Linux,首先要面对的就是Linux命令行提示符. Linux命令行结尾的提示符有" ...

  9. 经典 | 深度学习的7大实用技巧

    编译 | AI科技大本营 参与 | 林椿眄 编辑 | 谷 磊 对于许多具有挑战性的现实问题,深度学习已经成为最有效的解决方法. 例如,对于目标检测,语音识别和语言翻译等问题,深度学习能够表现出最佳的性 ...

最新文章

  1. [.Net跨平台]部署DTCMS到Jexus遇到的问题及解决思路---Linux环境搭建
  2. 庖丁解牛Nop:控制反转--IOC和DI
  3. linux命令行引导iso,如何在Linux上使用命令行从可启动ISO创建可启动USB?
  4. 《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法2
  5. hdu-1392 Surround the Trees poj Rope (简单凸包)
  6. 【论文相关】 技术性论文结构剖析
  7. 10个关于文件操作的小功能(Python),都很实用~
  8. 洛阳师范学院计算机科学与技术专业怎么样,2019洛阳师范学院专业排名
  9. python-copy模块-待优化的功能
  10. alter table add column多个字段_element中el-table单行暂无数据和整体暂无数据的默认修改...
  11. 数字图像处理吴娱课后答案_(完整版)数字图像处理每章课后题参考答案
  12. div半透明背景,文字不透明
  13. 牛客寒假算法集训营1 小a与军团模拟器(启发式合并)
  14. 【ReID】EANet: Enhancing Alignment for Cross-Domain Person Re-identification
  15. java获取经纬度_java调用高德地图api获取某个位置的经纬度
  16. 苹果cms播放器不能全屏播放解决方法
  17. 本原多项式/PRBS编码
  18. Qt 5.12 编写多窗口程序(新手手把手教学)
  19. [Pytorch系列-30]:神经网络基础 - torch.nn库五大基本功能:nn.Parameter、nn.Linear、nn.functioinal、nn.Module、nn.Sequentia
  20. 先进事迹如何写出深度?到底怎么做

热门文章

  1. 美国高校开源迄今为止最大新冠肺炎CT数据集
  2. 北大提出Gate Decorator,利用LSTM思想来做CNN剪枝
  3. Intel刚刚收购的Vertex.AI,到底有什么黑科技?
  4. php 代码下载_PHP实现下载功能的代码
  5. 超赞!3行代码可视化Transformer
  6. 收藏 | 可能是最详尽的PyTorch动态图解析
  7. 即使在移动AI时代,软件仍将主导业界
  8. 收藏 | 一文读懂深度学习中的各种卷积
  9. 实战深度强化学习DQN-理论和实践
  10. mysql索引三个字段查询两个字段_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?......