在开发Web应用程序方面,Asp.net是一个令人敬畏的框架。如果你使用过一段时间,那么这就不是什么秘密了。它提供了一些十分强大的新特征,而你只需要些少量的代码就能实现。我曾经列出一个清单,上面是一些你可以只用少量或不用任何c#/VB.net代码就能实现的非常简单(甚至很酷)的功能。如果你有其他建议,可以添加评论,如果你的建议是一件能够容易应用的任务,我将进一步更新我的清单。

1、当页面PostBacks的时候,保持滚动条的位置。
在ASP.NET 1.1中,当进行postback 操作的时候,如果想保持滚动条的位置,那真是一件痛苦的事情,特别是当页面上有一个grid(表格?)而你想编辑某一具体行的时候。页面将会重新加载,滚动条位于页面顶端,而不是你期望的位置,这样你就不得不下拉滚动条。在ASP.net2.0中,你可以简单地在Page directive这里加上MaintainScrollPostionOnPostBack 属性(来实现同样的功能)。

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

2、当页面加载的时候,控件获得默认焦点。
这是另一件很简单的事情,而不用通过写javascrip脚本。如果你的页面上只有一个(或者两个)文本输入框,用户为什么非要点击文本框之后才能开始输入呢?光标难道就不能自动位于文本框,用户可以马上输入?使用HtmlForm控件的DefaultFocus 属性,你就可以很容易地做到。

<form id="frm" DefaultFocus="txtUserName" runat="server">
  
</form> 

3、当用户按下Enter键的时候,设置默认触发按钮。
在ASP.NET 1.1中,这又是一件十分痛苦的事情。当用户按下Enter键的时候,你需要写一些javascript代码,来保证页面上适当的按钮触发一个服务器端“Click”事件。幸运的是,每当用户按下Enter键的时候,你现在可以使用HtmlForm的DefaultButton 属性来设置点击哪一个按钮。还有一种情况,每当user(指光标是否更合适?)进入页面上不同面板触发不同的按钮,(这个情况下),就可以设置Panel控件的DefaultButton 属性。

<form id="frm" DefaultButton="btnSubmit" runat="server">
  
</form> 

4、容易地定位nested controls(嵌套控件?排列整齐的控件?表达不出来...呵呵~)。
在一个页面的控件层次中查找某些控件,确实是一件很头痛的事。但是如果你知道控件是如何嵌套(nest)的,你可以使用不怎么常用的快捷方式"$"来查找控件,而不用写递归代码。If you're looking for a great way to recursively find a control (in cases where you don't know the exact control nesting) check out my good buddy Michael Palermo's blog entry.(这一句是广告,不翻了~)。以下代码展示了如何使用DefaultFocus 属性来给嵌套在FormView控件里面的文本框设置焦点。注意,用“$”来划定嵌套方式(nesting):

<form id="form1" runat="server" DefaultFocus="formVw$txtName">
    <div>
        <asp:FormView ID="formVw" runat="server">
            <ItemTemplate>
                Name: 
                <asp:TextBox ID="txtName" runat="server" 
                    Text='<%# Eval("FirstName") + " " + Eval("LastName") %>' />
            </ItemTemplate>
        </asp:FormView>
    </div>
</form>

在服务器端代码中调用FindControl()方法,也有一点小技巧。想了解更多细节,稍后请访问 I blogged about this 。这里有一个例子:

TextBox tb = this.FindControl("form1$formVw$txtName") as TextBox;
if (tb != null)
{
    //Access TextBox control

5、Strongly-typed access to cross-page postback controls强类型方式访问跨页面PostBack控件。
这一条比其他任何一点都更加involved(“包含”?不像,应该是“不常用”的意思吧),但是十分有用。一个页面提交信息到另一个页面,在这里ASP.NET 2.0介绍了跨页面提交的概念。按钮提交数据到一个页面,把按钮的PostBackUrl属性设置为目标页面的名字,就是通过这种方式(实现跨页面提交)。
一般情况下,可以通过PreviousPage.FindControl("ControlID")方式来访问提交的数据。然而,这需要看情况(requires a cast),如果你需要访问先前页面中的属性(经常需要这么做)。如果在发起回传操作的页面后台代码中增加一个公有属性,那么你可以通过在本次回传的目标页中增加PreviousPageType directive,以强类型的方式来访问这些公有属性。如果你还没有尝试过,这听起来或许有点混淆,所以允许我多解释一些。

假如有一个页面叫做Default.aspx,同时向外提供一个公有属性,来返回页面中定义的TextBox的值。数据所要提交到的页面(姑且叫做SearchResult.aspx吧)就能够以强类型的方式访问到这些属性,只需要在SearchResult.aspx页面顶端增加PreviousPageType directive:

<%@ PreviousPageType VirtualPath="Default.aspx" %> 

通过添加这个directive,SearchResult.aspx中的代码就可以以强类型的方式访问Default.aspx中定义的TextBox。在以下的示例中,假设Default.aspx中定义的属性名是SearchTextBox.

TextBox tb = PreviousPage.SearchTextBox; 

很明显,这行代码只有在上一页(Previous Page)是Default.aspx的情况下才能正常运行。同时PreviousPageType 也有一个TypeName属性,根据这个属性,你可以定义一个基类型,这样你可以让一个或者多个页面获取这个基类型的值来支持多页面。你可以从这里了解更多关于PreviousPageType。
(这段代码不好翻译,免于出错,仅给出部分意思,望达人补充,原文如下:This code obviously only works if the previous page is Default.aspx.  PreviousPageType also has a TypeName property as well where you could define a base type that one or more pages derive from to make this technique work with multiple pages.  You can learn more about PreviousPageType here.)

6、强类型方式访问MasterPages控件。
PreviousPageType directive 不是唯一一种提供强类型访问控件的方式。如果想通过强类型的方式访问定义在MasterPages中的控件,你可以在要显示的页面中增加MasterType directive(记住,MasterType directive和PreviousPageType directive一样,也可以定义一个类型名)

<%@ MasterType VirtualPath="MasterPage.master" %> 

这样,你就能在content page中按以下代码方式访问目标master page中的属性:

this.Master.HeaderText = "Label updated using MasterType directive with VirtualPath attribute."; 

你也可以找到一些关于使用master page的技巧,包括在我先前的一篇blog中所提到的“共享master page访问IIS虚拟目录”等。

7、验证组 Validation groups
你有这样一个页面,包含几个控件和几个按钮。当点击其中一个按钮的时候,你希望evaluate指定的按钮(evaluate原意:评估,得到……的值;这里的意思:得到按钮的值),而不是页面中所有的按钮。在ASP.NET 1.1 中,如果不去resorting to some hack code(怎么译?)的话,就很难处理这样的问题。ASP.NET 2.0给所有的验证控件和按钮(Button,LinkButton)增加了一个ValidationGroup属性,可以很容易地解决问题。如果在页面顶端有一个TextBox和一个Button控件,紧挨着TextBox是一个RequiredFieldValidator控件,把button和RequiredFieldValidator控件上的ValidationGroup属性值设置为相同的值,当点击按钮的时候,你就能fire(“激活”?不解~)一个验证。当点击按钮的时候,任何定义在ValidationGroup之外的验证都被忽略了。这里有一个示例:

<form id="form1" runat="server">

    Search Text: <asp:TextBox ID="txtSearch" runat="server" /> 

    <asp:RequiredFieldValidator ID="valSearch" runat="Server" 
      ControlToValidate="txtSearch" ValidationGroup="SearchGroup" /> 

    <asp:Button ID="btnSearch" runat="server" Text="Search" 
      ValidationGroup="SearchGroup" />
    .
    Other controls with validators and buttons defined here
</form> 

8、编码的时候查找控件或者变量的名字。
这个技巧和Asp.net没有直接关系,与VS.net反而更有关系。对你们这些只记住了控件或变量名的前几个字母而没有记住全名的人来说,这个技巧确实十分有用。这让我又有机会去提起来自microsoft下载到的两个伟大的下载。第一,在输入控件名的前几个字母的时候,按下CTRL+SPACEBAR,VS.net将会跳出一个匹配项的简短列表。的确,这将更加容易地找到控件或者变量的名字。(译者注:怎么没有第二了?)对于感兴趣的朋友,微软提供整套完整的VS.net快捷键下载:c# Version here和VB.NET Version here

转载于:https://www.cnblogs.com/SoulStore/archive/2007/04/23/723610.html

你或许还未听说过的一些ASP.NET 2.0要诀 [转]相关推荐

  1. [翻译]你或许还未听说过的一些ASP.NET 2.0要诀

    原文链接:http://weblogs.asp.net/dwahlin/archive/2007/04/17/simple-asp-net-2-0-tips-and-tricks-that-you-m ...

  2. 余承东回应“卸任”传闻:服务还未拼尽全力,岂敢先溜

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 2018年1月10日,远赴美国拉斯维加斯参加一年一度CES消费电子展的余承东,针对AT&am ...

  3. lol无限火力服务器瘫痪,LOL无限火力:玩家找到秒进“BUG”,现在还未修复赶紧去...

    原标题:LOL无限火力:玩家找到秒进"BUG",现在还未修复赶紧去 LOL无限火力出来已经有一半的时间了,这次国服无限火力开放的时间相比从前,可以说非常短暂,不同于以往的无限乱斗, ...

  4. 万亿市值“唾手可得“,但“宁德时代“还未到来

    一个崭新的时代正在拉开序幕. 1月4日,A股迎来了2021年的第一个交易日.这一天,宁德时代股价在这第一个交易日掀起了惊人的涨幅,刷新历史新高. 截至当日收盘,宁德时代股价上涨15.09%,报收404 ...

  5. 【游记】还未泯灭的青春

    抢个沙发吧 原文地址:[游记]还未泯灭的青春 作者:我是否会沉沦 首先要声明一下: 因为照相机在关键时刻坏了,只能用我那破摩托罗拉拍了一些照片,你们就将就一下了 只要你有说走就走的心,那就立即背上背包 ...

  6. iPIN CEO 杨洋:AI 还未被大规模用在工作中,缺的是认知智能

    iPIN CEO 杨洋:AI 还未被大规模用在工作中,缺的是认知智能 本文作者:叨叨 2017-08-06 10:49 导语:如果一个技术不能解决问题,是没有价值的. 雷锋网(公众号:雷锋网)按:8 ...

  7. 川大优秀毕业生在GitHub上建了一个项目《深度学习500问》,还未完结就获赞无数

    近年来,深度学习在语音.图像.自然语言处理等领域都取得了非常不错的成果,自然而然地成为技术人员争相学习的热点. 为了帮助正在学习深度学习的伙伴们,川大的一名优秀毕业生,在GitHub上创建了一个项目: ...

  8. Vue封装下拉框组件时,为document绑定原生事件addEventlistener(click“),切换页面之后事件还未被摧毁...

    1 <script> 2 export default { 3 props: ["lists"], 4 data() { 5 return { 6 isactive: ...

  9. c# 使用timer定时器操作,上次定时到了以后,下次还未执行完怎么处理

    c# 使用timer定时器操作,下次定时到了以后,上次还未执行完怎么办 ------解决方案------------------------------------------------------ ...

最新文章

  1. 来玩Play框架07 静态文件
  2. ubuntu 12.04 php升级,在 Ubuntu 12.04 LTS 中将 PHP 从 5.3 升级到 5.5
  3. Eclipse修改console输出最大行数及(IOConsole Updater)
  4. 其实,这仅仅是个开始
  5. 【渝粤教育】国家开放大学2018年秋季 0161-22T教师职业道德 参考试题
  6. ftp 追加远程文件_远程办公彻底火了,高效办公,拒绝卡顿,远程利器你选对了么?...
  7. 矩阵分析理论在实际工程中的应用_【顶管技术在市政给排水工程中的应用分析】...
  8. [工作积累] UE4 TAA ReProjection的精度处理
  9. 轻量级OLAP(一):Cube计算
  10. 美国智能机市场Android份额逼近苹果iOS
  11. enctype =#39;multipart / form-data#39;是什么意思?
  12. php 密匙加密解密,带密匙的php加密解密示例分享
  13. Uncaught ReferenceError: jie is not defined
  14. 简易c语言编程软件,c语言开发工具下载
  15. matlab中grid的用法
  16. 漂泊的旅途,云淡风轻
  17. 字节跳动 C++面经总结第四期
  18. 第9个HttpClient 例子,HttpClient+jsoup 扩展获取网站信息
  19. 使用 lasio 处理 .las 文件
  20. 学习表——受任于败军之际,奉命于危难之间(12.5-12.11)

热门文章

  1. python print中文_python:print含有中文的list
  2. 反转链表 IIPython解法
  3. 查看Python当前版本
  4. MySQL跨机房集群方案_Mysql跨机房同步方案
  5. android sdk引入 微信分享_微信分享sdk接入总结
  6. TIMING_01 时序约束与时序分析引导篇
  7. python批量复制文件问题,python 批量复制不同目录下的文件
  8. 获取表数据_mysql数据库部分表被truncate,部分数据被delete的解决过程
  9. centos php 开启libgdgd_CentOS搭建PHP环境
  10. python 支持向量机 导出参数_SVM支持向量机推导,工具介绍及python实现