当前位置: 首页 > news >正文

ASP.NET中的一些小技巧

 

在开发Web应用程序方面,Asp.net是一个令人敬畏的框架。如果你使用过一段时间,那么这就不是什么秘密了。它提供了一些十分强大的新特征,而你只需要些少量的代码就能实现。我曾经列出一个清单,上面是一些你可以只用少量或不用任何c#/VB.net代码就能实现的非常简单(甚至很酷)的功能。如果你有其他建议,可以添加评论,如果你的建议是一件能够容易应用的任务,我将进一步更新我的清单。
1、 当页面PostBacks的时候,保持滚动条的位置。
在ASP.NET 1.1中,当进行postback 操作的时候,如果想保持滚动条的位置,那真是一件痛苦的事情,特别是当页面上有一个grid(表格?)而你想编辑某一具体行的时候。页面将会重新加载,滚动条位于页面顶端,而不是你期望的位置,这样你就不得不下拉滚动条。在ASP.net2.0中,你可以简单地在Page directive这里加上MaintainScrollPostionOnPostBack 属性(来实现同样的功能)。
<%@ Page Language="C#" MaintainScrollPositi 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的技巧,包括在 以前写的所提到的“共享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"
      C Validati />

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

8、 编码的时候查找控件或者变量的名字。
这个技巧和Asp.net没有直接关系,与VS.net反而更有关系。对你们这些只记住了控件或变量名的前几个字母而没有记住全名的人来说,这个技巧确实十分有用。这让我又有机会去提起来自microsoft下载到的两个伟大的下载。第一,在输入控件名的前几个字母的时候,按下CTRL+SPACEBAR, VS.net将会跳出一个匹配项的简短列表。

转载于:https://www.cnblogs.com/zongzhankui/archive/2009/04/20/5875390.html

相关文章:

  • 写查询语句出现的问题.显示查不到的数据出错,帮忙看看
  • 深入剖析SAS技术
  • linux命令--grep
  • 鞋为什么会臭?14个方法巧除鞋臭脚臭!
  • Linux下history命令用法15例-zt
  • 我的架构经验小结(四)-- 实战中演化的三层架构
  • 世卫专家评估甲型H1N1病毒大流行风险
  • Ruby之旅—Ruby解释器的安装
  • 我在Asp.net记录错误日志的代码
  • GRUB 安装使用
  • 生成建表脚本(V2.0)
  • EX07学习笔记之一:Exchange2007在Win2003上的安装
  • web developer tips (1):创建、管理、应用样式表的强大工具
  • AS2中Tween类的delete与stop
  • Java网络编程从入门到精通(17):Socket类的getter和setter方法(1)
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • C学习-枚举(九)
  • Gradle 5.0 正式版发布
  • JAVA 学习IO流
  • Linux gpio口使用方法
  • Terraform入门 - 3. 变更基础设施
  • 从setTimeout-setInterval看JS线程
  • 翻译:Hystrix - How To Use
  • 七牛云假注销小指南
  • 如何利用MongoDB打造TOP榜小程序
  • 如何优雅地使用 Sublime Text
  • 突破自己的技术思维
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • - 转 Ext2.0 form使用实例
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #pragam once 和 #ifndef 预编译头
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $.ajax中的eval及dataType
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (vue)页面文件上传获取:action地址
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (编译到47%失败)to be deleted
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .htaccess配置重写url引擎
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net MySql
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .Net的DataSet直接与SQL2005交互