当前位置: 首页 > 编程日记 > 正文

ASP.NET设计应用程序的七大绝招

随着微软.NET的流行,ASP.NET越来越为广大开发人员所接受。作为ASP.NET的开发人员,我们不仅需要掌握其基本的原理,更要多多实践,从实践中获取真正的开发本领。在我们的实际开发中,往往基本的原理满足不了开发需求,我们更多的要积累一些开发技巧,本文就向大家介绍一些实用技巧,希望对大家的开发有所裨益。

1. ~ 的用法

一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片,而这个控件被我们在不同层次的两个目录的aspx文件分别引用时,问题就会出现了。

~/image/about.bmp 是一种非常好的方法,它以Web应用程序的根目录为起始点,这样使得比你使用./image/about.bmp这样的方式要更加灵活和方便。有一点不好,是这种方式是在ASP.NET运行时动态解析的,所以在IDE设计模式中,你可能不能预览它。

2. 在刷新和提交页面后,保存你的页面滚动条的位置

经常有这样的情况,我们需要用户提交一个表单,但是表单中有超过500+个?控件或文本框要填写,也就是说用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时,页面确定在3/1的地方也就是显示在页面最开始的地方,用户只有拖动鼠标,然后接着刚刚的地方再填写剩下的250个控件,很不幸,370个控件又需要他选择一下?

用下面的方法可以很快地确定和记住你提交前的位置。

网上的Old Dog Learns New Tricks也有一个类似的例子Maintain Scroll Position in any Page Element,不过他使用了Web Behavior这意味着你需要使用一个.htc文件

Private Sub RetainScrollPosition()

Dim saveScrollPosition As New StringBuilder
Dim setScrollPosition As New StringBuilder

RegisterHiddenField("__SCROLLPOS", "0")
saveScrollPosition.Append("<script language='javascript'>")
saveScrollPosition.Append("function saveScrollPosition() {")
saveScrollPosition.Append(" document.forms[0].__SCROLLPOS.value = thebody.scrollTop;")
saveScrollPosition.Append("}")
saveScrollPosition.Append("thebody.οnscrοll=saveScrollPosition;")
saveScrollPosition.Append("</script>")

RegisterStartupScript("saveScroll", saveScrollPosition.ToString())

If (Page.IsPostBack = True) Then

setScrollPosition.Append("<script language='javascript'>")
setScrollPosition.Append("function setScrollPosition() {")
setScrollPosition.Append(" thebody.scrollTop = " & Request("__SCROLLPOS") & ";")
setScrollPosition.Append("}")
setScrollPosition.Append("thebody.οnlοad=setScrollPosition;")
setScrollPosition.Append("</script>")
RegisterStartupScript("setScroll", setScrollPosition.ToString())

End If

End Sub

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RetainScrollPosition()
End Sub

3. DataList使用不同风格的模板

这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound方法也可以定制你显示的表现,比如加亮某个元素或是加一个促销广告图等等。

Dim theme As String
theme = DropDownList1.SelectedValue

DataList1.ItemTemplate = Page.LoadTemplate(theme & ".ascx") ---Cool
DataList1.DataSource = DS
DataList1.DataBind()


4. 设置服务器端控件的焦点

Private Sub SetFocus(ByVal controlToFocus As Control)
Dim scriptFunction As New StringBuilder
Dim scriptClientId As String

scriptClientId = controlToFocus.ClientID
scriptFunction.Append("<script language='javascript'>")
scriptFunction.Append("document.getElementById('" & scriptClientId & "').focus();")
scriptFunction.Append("</script>")
RegisterStartupScript("focus", scriptFunction.ToString())
End Sub

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If (Page.IsPostBack = False) Then
SetFocus(TextBox1)
End If
End Sub


5. 滚动DataGrid

这招就更简单了,有时候你的页面只有一个固定的地方,但是需要显示非常多的数据,亦或是也不定,但是只有固定的一个地方给你显示它了。这时你就可以用下面这招,自动出滚动条,而且适用许多控件。很简单将你的控件放在一个DIV中将overflow属性设置成auto

<div style=“height:400px;width:200px;overflow:auto”>
<asp:datagrid id=“MyGrid” runat=“server”/>
</div>

6. 动态创建控件

利用PlaceHolder控件,这东西在ASP.NET 2.0 Mutil-View和Master Page中运用的就更加多了。

Sub Page_Load()
Dim i as Integer
For i=0 to 4
Dim myUserControl as Control
myUserControl = Page.LoadControl(“foo.ascx”)
PlaceHolder1.Controls.Add(myUserControl)
PlaceHolder1.Controls.Add(New LiteralControl(“<br>”))
Next i
End Sub


7. 客户端代码的使用

1). 可以使用客户端的事件代码,但两者不能同名,服务器端代码的名是你可以控制的。对于非ASP.NET的标准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性

asp:ImageButton id=“foo”
ImageUrl=“start.jpg”
onMouseOver=“rollover(this);”
onMouseOut=“rollout(this)”
rolloversrc=“myrollover.jpg”
rolloutsrc=“myrollout.jpg”
runat=“server”/>

<input type=Button onClick=“return clientHandler()”
onServerClick=“Button1_Click” … />


2). 使用可以在Postback之前执行客户端代码,当然也可以取消这次Postback,另外也可以访问客户端该页所有的客户端控件。

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles MyBase.Load
 RegisterOnSubmitStatement("foo", "return confirm('Are you sure you want to submit the order?');")
End Sub


3). 还有更复杂的我认为不实用,大家可以自己去看,主要是运用RegisterStartupScript和JavaScript的技术

以上文章介绍了一些ASP.NET中常用而且比较实用的技巧,希望能对大家的实际开发有所裨益!

相关文章:

Chromium之各国语言切换

在\src\build\Debug\locales\目录下存放着各国语言所需要的资源文件xx.pak,我这边共有53中语言支持。 命令行进入src\build\Debug目录,敲:chrome.exe --langzh-CN就能用中文简体,zh-CN可以根据需要换成各种语言版本。 Chrome的整个solution中,每种语言都会有个相应的…

程序员每天工作摸鱼俩小时,月薪35K?

职场上有很多奇奇怪怪的事。比如说有人爆肝996,工资却还养不活自己。有人每天工作摸鱼,但是却月薪数万。前端时间,小编在某职场社交平台上看到这么一则帖子#程序员摸鱼2小时月入35k#仔细看下,该员工每天的工作日常就是摸鱼的间隙工…

JAVA的get post 区别

1. get 是从服务器上获取数据,post 是向服务器传送数据。 get 请求返回 request - URI 所指出的任意信息。Post 请求用来发送电子邮件、新闻或发送能由交互用户填写的表格。这是唯一需要在请求中发送body的请求。使用Post请求时需要在报文首部 Content - Length 字段…

多些时间能少写些代码(转自酷壳 – CoolShell.cn)

我在我的微博上说过这样一段话,我想在这里把我的这个观点阐述地更完整一些。左耳朵耗子:聪明的程序员使用50%-70%的时间用来思考,尝试和权衡各种设计和实现,而用30% – 50%的时间是在忙碌着编码,调试和测试。聪明的老板…

HTTP协议之Chunked解析

在网上找了好一会,始终没发现有解析Chunked编码的文章,那就自己写一个吧,呵呵。网上使用Chunked编码的网站似乎并不是很多,除了那些使用GZip压缩的网站,例:google.com,还有就是大部分打开GZip压…

关于深度学习编译器,这些知识你需要知道

作者 | 小O妹出品 | AI科技大本营(ID:rgznai100)神经网络编译器概览近年来,以机器学习、深度学习为核心的AI技术得到迅猛发展,深度神经网络在各行各业得到广泛应用: 1. CV(计算机视觉)&#xf…

checkbox点击切换选中状态

2019独角兽企业重金招聘Python工程师标准>>> function cboxChecked(ele) {$(ele).click(function () {var isChecked $(ele).attr(checked);if (!isChecked) {$(ele).attr(checked, true)} else {$(ele).attr(checked, false)}})} 转载于:https://my.oschina.net/u…

提升Hadoop计算能力的并行框架

集算器是新型并行计算框架,它支持读写HDFS中的文件,可以通过并行框架将计算任务分担到多个节点中。它专注于加强Hadoop的计算能力,从而实现计算性能和开发效率更高的大数据应用。更强的计算能力。Hadoop所使用的计算语言为JAVA,JA…

在ASP.NET 2.0中建立站点导航层次

站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局。默认的站点导航提供程序是基于XML的,但是你也可以通过编写自定义的提供程序,…

加速数据中心变革,Xilinx推出软件定义、硬件加速型 Alveo SmartNIC

近日,为满足现代数据中心发展需求,赛灵思公司宣布推出一系列全新数据中心产品及解决方案,包括全新 Alveo SmartNIC 系列、smart world (智能世界) AI 视频分析应用、一款能够实现亚微秒级交易的加速算法交易参考设计&a…

跟阿里云技术专家阙寒一起深度了解视频直播CDN技术

网络直播平台现下已经十分火热,很多常见的直播平台都采用了阿里云直播CDN来搭建自身业务。今天,我们请来了阿里云CDN团队技术专家阙寒,来介绍下视频的一些基础知识和视频直播的架构。在进入正题之前,我们先来了解视频直播相关的名…

一个ASP.NET中使用的MessageBox类

/// <summary>/// 自定义信息对话框/// </summary>public class MessageBox{/// <summary>/// 定义一个web页面&#xff0c;用来显示用户自定错误提示信息/// </summary>System.Web.UI.Page p;/// <summary>/// 实例时&#xff0c;参数为:this 如…

Ubuntu 13.10 安装Terminalx 后更改默认终端设置

1、安装 terminalx&#xff0c; sudo apt-get install terminator 2、Ctrl Alt t 试一下打开什么终端&#xff0c;我的默认启动的是Terminator;如果想换换默认的终端&#xff0c;还需以下一步 3、接下来&#xff0c;安装dconf-tools&#xff0c;这个是设置默认终端的必须 打开…

360数科张家兴:如何突破三大瓶颈,破解金融科技发展难题?

3月6日&#xff0c;上海香港联会、普陀香港联会联合普陀新区联会&#xff0c;IFTA亚洲金融科技师学会共同举办了“沪港合作共创未来”——沪港两地金融科技线上论坛。本次活动通过沪港两地直播连线&#xff0c;探讨两地金融科技领域的发展机遇。麻省理工学院香港创坊执行董事冼…

通过改进算法来优化程序性能的真实案例(Ransac)

对于运行不了几次&#xff0c;一次运行不了多久的方法&#xff0c;我们不需要考虑性能优化&#xff0c;对于那些需要经常运行几百次几千次的方法&#xff0c;我们头脑里还是要有性能这根弦。C#太优雅方便了&#xff0c;以至于很多人写程序时根本就把性能抛到脑后了&#xff0c;…

ASP.NET中使用MD5和SHA1算法加密

你的主页或者你管理的网站有各种密码需要保护&#xff0c;把密码直接放在数据库或者文件中存在不少安全隐患&#xff0c;所以密码加密后存储是最常见的做法。在ASP.NET中实现加密非常容易。.NET SDK中提供了CookieAuthentication类&#xff0c;其中的HashPasswordForStoringInC…

不追逐标准化产品,360数科的一站式风控体系有何不同?

新冠肺炎疫情无疑加速了金融行业数字化转型&#xff0c;竞争者不断涌入&#xff0c;逐渐形成由BATJ、传统银行旗下金融科技子公司、以及专注于金融机构的数字化服务公司构成的竞争格局。然而&#xff0c;风控始终是金融行业的核心。作为定位于中国零售金融领域科技服务商的360数…

基于Bootstrap里面的Button dropdown打造自定义select

最近工作非常的忙&#xff0c;在对一个系统进行改版。项目后台是MVC1.0开发的&#xff0c;但是前端部分已经改过几个版本&#xff0c;而已之前的设计师很强大&#xff0c;又做设计又做前端开发。而已很时尚和前沿&#xff0c;使用了一直都很热门的Bootstrap工具包&#xff0c;有…

HybridDB · 源码分析 · MemoryContext 内存管理和内存异常分析

背景 最近排查和解决了几处 HybridDB for PostgreSQL 内存泄漏的BUG。觉得有一定通用性。 这期分享给大家一些实现细节和小技巧。 阿里云上的 HybridDB for PostgreSQL 是基于 PostgreSQL 开发&#xff0c;定位于 OLAP 场景的 MPP 架构数据库集群。它不少的内部机制沿用了 Post…

联合南京大学,爱奇艺智能论文入选顶会CVPR 2021

日前&#xff0c;全球计算机视觉顶级会议CVPR (IEEE Conference on Computer Vision and Pattern Recognition)公布了2021年论文接收结果。作为计算机视觉领域世界三大顶会(CVPR、ICCV、ECCV)之一&#xff0c;CVPR的论文投稿量近五年来持续大涨。据CVPR官网显示&#xff0c;今…

Forefront_TMG_2010-TMG发布Web服务器

1.环境拓扑图&#xff1a;2.准备DMZ区域的Web服务器&#xff1a;安装Web服务器&#xff1a;在DMZ区域的Web服务器进行测试&#xff1a;3.TMG发布Web服务器&#xff1a;打开TMG管理控制台&#xff0c;新建“网站发布规则”&#xff1a;新建名称&#xff1a;选择“允许”&#xf…

ASP.NET实现身份模拟

使用模拟时&#xff0c;ASP.NET 应用程序可以选择以这些应用程序当前正为之操作的客户的身份执行。通常这样做的原因是为了避免在 ASP.NET 应用程序代码中处理身份验证和授权问题。而您依赖于 Microsoft Internet 信息服务 (IIS) 来验证用户&#xff0c;然后将已通过验证的标记…

Mac homebrew类似apt-get命令安装包

INSTALL brew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 其它&#xff1a; 其他brew命令 brew list 列出已安装的软件 brew update 更新brew brew home 用浏览器打开brew的官方网站 brew inf…

asp.net中长内容自动分页的实现

在一篇文章过长时,可以自动的写个小程序对其进行分页.具体代码:public class t3 : System.Web.UI.Page { private string str;//字符 private int strl;//字符总长度 private int pagesize;//每页显示的字符数 …

黑马程序员之List--队列、栈...

--------------------- ASP.NetUnity开发、.Net培训、期待与您交流&#xff01; ---------------------- 1.队列&#xff1a;先进先出 运行结果&#xff1a; zhangsan lisi wangwu 2.栈&#xff1a;先进后出 结果&#xff1a; lisi wangwu zhangsan 3. 去除重复元素思路&#x…

龙芯架构应用迁移技术分享——搜狗输入法应用迁移

技术引领创新&#xff0c;用“芯”构建生态&#xff0c;第一期龙芯生态论坛将于2021年3月12日&#xff08;周五&#xff09;盛大开讲&#xff01;龙芯生态论坛作为龙芯生态建设的重要技术交流窗口&#xff0c;将汇聚龙芯资深技术专家及行业生态伙伴精英&#xff0c;持续开展行业…

Health Check in eShop -- 解析微软微服务架构Demo(五)

引言 What is the Health Check Health Check&#xff08;健康状态检查&#xff09;不仅是对自己应用程序内部检测各个项目之间的健康状态&#xff08;各项目的运行情况、项目之间的连接情况等&#xff09;&#xff0c;还包括了应用程序对外部或者第三方依赖库的状态检测。 Why…

网易伏羲论文入选 CVPR:AI 感知表情能力或实现巨大突破!

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2月28日&#xff0c;人工智能顶级会议CVPR 2021&#xff08;国际计算机视觉与模式识别会议&#xff0c;Conference onComputer Vision and Pattern Recognition&#xff09;公布论文录取结果&#xff0c;网易伏羲共有3…

asp.net/c#字符格式化大总结

一、用{0:?}格式化可通过 String.Format 方法或通过 Console.Write 方法格式化数值结果&#xff0c;其中后一种方法调用 String.Format。使用格式字符串指定格式。下表包含受支持的标准格式字符串。格式字符串采用的形式为 Axx&#xff0c;其中 A 为“格式说明符”&#xff0c…

小鱼提问1 类中嵌套public修饰的枚举,外部访问的时候却只能Class.Enum这样访问,这是为何?...

/// <summary>/// 常量等定义/// </summary>public class General{/// <summary>/// 文件类型/// </summary>public enum FileType{}}小鱼提问&#xff1a;都是public修饰&#xff0c;为何外部只能General.FileType这样访问&#xff1f;既然外部都不能…