• 您的信息
      • 日期时间
        2025年3月8日 星期六
        【蛇】己卯月丙子日
        乙巳年 二月初九
        妇女节
        您的信息
        您的IP:
        3.145.109.147
        操作系统:
        未知操作系统
        浏览器:
        未知浏览器
        分辨率:
        1280x720
        位置:
        缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備胶绮崝锕傚礈濞嗘挸绀夐柕鍫濇缁♀偓闂侀€炲苯澧繛鐓庣箻閸╋繝宕掗妶鍡欑◥闂傚倷绀佸﹢閬嶅磿閵堝钃熼柨鐔哄Т绾惧鏌熼崜褏甯涢柡鍛叀楠炴牜鍒掗崗澶婁壕闁圭粯甯╁Λ婊呯磽閸屾艾鈧兘鎮為敂鑺ユ珷閹兼番鍔岄悿鐐節婵犲倹鍣虹€规洖寮剁换娑㈠箣閻戝洣绶甸梺鍝ュ枎閹冲繘濡甸崟顖氱睄闁搞儜鍐╁劒闂備胶鍎甸弲娑㈡煀閿濆钃熸繛鎴欏灩鍞梺鎸庢濡嫰宕径濞炬斀妞ゆ梻銆嬫Λ姘箾閸滃啰绉€规洜濞€瀵粙顢橀悙鎻掔ギ闂備胶绮ú鎴犳媼閺屻儱纾婚柟鎹愵嚙楠炪垺绻涢幋鐐垫噮闁告ɑ鎮傚娲川婵犱胶绻侀梺鍝ュУ瀹€鎼佸箚瀹€鍕闁规儳褰夌花濠氭⒑闂堟盯鐛滅紒杈ㄦ礋楠炲﹪宕堕埞鎯т壕婵炲牆鐏濆▍姗€鏌涢敐蹇曞埌闁伙絿鍏橀獮鎺楀箣閺傝法澧梻浣告啞缁矂宕导瀛樷拻妞ゆ牗绋撶弧鈧梺姹囧灲濞佳勭閳哄懏鐓欐繛鑼额唺缁ㄧ晫鈧灚婢橀敃顏堝箠閻愬搫唯鐟滃繗銇愰悙顒傜瘈闁汇垽娼у瓭濠电偛鐪伴崐妤佺珶閺囥垹閿ゆ俊銈勮兌閸樼敻姊虹憴鍕靛晱闁哥姵鐗犻妴鍌涚附閸涘﹦鍘介梺瑙勫劤瀹曨剟宕濆⿰鍛<缂備焦岣垮ú瀛橆殽閻愬樊鍎旈柟顔界懇瀹曞綊顢曢姀锛勫将缂傚倸鍊搁崐椋庢媼閺屻儱纾婚柟鐐墯閻斿棝鏌ら幖浣规锭濠殿喖鐗撻弻锝夊箻瀹曞洨顔掗梺鍝勬湰閻╊垱淇婇悜鑺ユ櫜闁告侗鍙庨悗鍐测攽閻樻剚鍟忛柛鐘崇墱缁棃鎮介幖鐐╁亾閸愵喖唯闁冲搫鍊搁埀顒傚厴閺屸剝寰勭€n亞浠搁柣鐘叉川閸嬫稖鐏冮梺缁橈耿濞佳勭閿曗偓閻f繈鏁愰崨顔间淮闂佺硶鏂侀崑鎾愁渻閵堝棗绗傞柤鍐茬埣閸╁﹪寮撮姀锛勫弳闂佸搫娲﹂〃鍡椻枍閸℃瑧纾奸柛灞剧☉缁椻晜銇勯敃渚囨綈闁逛究鍔嶇换婵嬪磼閵堝洤鎮戦柣搴ゎ潐濞叉ḿ鏁幒妤€鐓濋幖娣妼缁犳稒銇勯弬鎸庢儓濞寸姵甯掗埞鎴︽偐閸偅姣勯梺绋款儐閻╊垵妫熼梺鍝勵槹閿涙洖煤椤忓懎浜滄俊鐐差儏鐎涒晛鈻撴ィ鍐┾拺閻熸瑥瀚崝璺衡攽椤斿搫鈧繂顕i幓鎺嗘斀閻庯綆鍋嗛崢閬嶆煟韫囨洖浠ч柛瀣崌閹啴骞嬮悙顏冪盎闂佸搫鍊圭€笛囁夐姀鈩冨弿濠电姴鎳忛鐘绘煙閻熸澘顏┑鈩冩倐婵$兘鏁傞幆褏绋堥梻鍌氬€烽懗鍫曞箠閹捐鍚归柡宥庡幖缁狀垶鏌ㄩ悤鍌涘 Amazon EC2闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劌銈搁弻鐔兼儌閸濄儳袦闂佸搫鐭夌紞渚€銆佸鈧幃娆撳箹椤撶噥妫ч梻鍌欑窔濞佳兾涘▎鎴炴殰闁圭儤顨愮紞鏍ㄧ節闂堟侗鍎愰柡鍛叀閺屾稑鈽夐崡鐐差潻濡炪們鍎查懝楣冨煘閹寸偛绠犻梺绋匡攻椤ㄥ棝骞堥妸鈺傚€婚柦妯侯槺閿涙盯姊虹紒妯哄闁稿簺鍊濆畷鎴犫偓锝庡枟閻撶喐淇婇婵嗗惞婵犫偓娴犲鐓冪憸婊堝礂濞戞碍顐芥慨姗嗗墻閸ゆ洟鏌熺紒銏犳灈妞ゎ偄鎳橀弻宥夊煛娴e憡娈查梺缁樼箖濞茬喎顫忕紒妯诲闁芥ê锛嶉幘缁樼叆婵﹩鍘规禍婊堟煥閺冨浂鍤欓柡瀣ㄥ€楃槐鎺撴綇閵婏富妫冮悗娈垮枟閹歌櫕鎱ㄩ埀顒勬煃闁款垰浜鹃梺褰掝棑缁垳鎹㈠☉娆愮秶闁告挆鍛呮艾鈹戦悙鍙夊珔缂傚秳鐒︽穱濠勨偓娑欋缚缁♀偓闂佹悶鍎崝搴ㄥ储闁秵鈷戦悷娆忓閸斻倖銇勯弴銊ュ箻缂侇喖顭烽幃娆撴倻濡厧骞嶆俊鐐€栧濠氬磻閹剧粯鍊块柟绋跨昂娴滄粓鏌ㄩ弴妤€浜剧紓鍌氱Т閿曨亜顕f繝姘亜缁炬媽椴搁弲顒€鈹戦瑙掕绂嶉鍕妞ゆ牗顕遍弮鍫熷亹闂傚牊绋愬▽顏嗏偓鍏夊亾闁挎繂鐗婄涵鑸典繆閸欏濮嶆鐐村浮楠炲﹤鐣烽崶褎鐏侀梺璇″枙閸楁娊宕规ィ鍐ㄧ闁告侗鍙庡Λ婊堟⒒閸屾瑧顦﹀鐟帮躬閹繝宕奸妷銉э紱闂佺硶鍓濋悷褎绋夊鍛傛棃鏁愰崨顓熸闂佺粯鎸婚悷鈺呭箖濡ゅ懏鍋ㄩ柣褑顕х紞濠傜暦濠婂牆纭€闁诲繗顕х紞濠囧箖閳╁啯鍎熼柕蹇婃櫆閿涘棝姊绘担鍛婃儓闁活剙銈稿畷浼村箛椤戣偐绱伴棅顐㈡处缁嬫垹绮堥崼銏″枑闊洦绋戝Ч鏌ユ煟濡偐甯涢柍閿嬪灦缁绘盯鎳犳0婵嗘濡ょ姷鍋為〃鍡涘Φ閸曨垰惟闁靛鍨甸崥顐︽⒑鐠団€虫珯缂佺粯绻堥妴渚€寮撮姀鈩冩珖闂侀€炲苯澧撮柟顔界懄缁绘繈宕堕妸褍甯惧┑鐘垫暩閸婎垶鍩€椤掑嫬纾婚柟鐐灱閺€鑺ャ亜閺傚灝鎮戦柛鐘成戦幈銊︾節閸涱噮浠╃紓浣介哺鐢帟鐏掗柣鐘叉搐瀵泛鈻撻锔解拻濞达絽鎲¢幉绋库攽椤旂偓鏆柟顔ㄥ洦鍋愮€瑰壊鍠栧▓銊︾節閻㈤潧校缁炬澘绉瑰鏌ュ箹娴e湱鍘藉┑鈽嗗灠閻忔繈鎯冮悜妯镐簻闁挎柨鎼慨鍌涙叏婵犲啯銇濇俊顐㈠暙闇夐柕濞垮劤缁夎櫣鈧娲樺ú鐔笺€佸璺虹劦妞ゆ巻鍋撻柣锝囧厴楠炲鏁冮埀顒傜不婵犳碍鍋i柛銉簻缁憋妇绱掗崡鐐靛煟婵﹥妞藉Λ鍐ㄢ槈鏉堫煈鈧棝姊婚崒姘仼閻庢凹鍓熼崺銏ゅ箻閺夋埈鍤ら柣搴㈢⊕鑿ら柟閿嬫そ濮婃椽宕ㄦ繝鍐ㄩ瀺閻熸粍婢橀崯顖滅矉瀹ュ應鏀介柛銉㈡櫇椤旀洟姊洪崨濠勬噧妞ぱ€鍋撻梺鍏兼緲濞硷繝寮诲☉銏犵厸闁稿本绮嶉崚娑樜旈悩闈涗沪閻㈩垱甯熼悘鍐╃箾鏉堝墽鍒伴柟纰卞亰閻涱噣宕奸妷锔规嫼闁荤姴娲╃亸娆戠不閹惰姤鐓曢悗锝庡墮閳诲牊銇勯姀鈥蹭孩妞わ箑缍婇弻娑㈠煘閹傚濠碉紕鍋戦崐鏍暜婵犲洦鍊块柨鏂垮⒔閻棝鎮楅敐搴℃灍闁绘挻鐟﹂妵鍕籍閳ь剟寮告繝姘殌闁秆勵殕閻撴稑霉閿濆毥褰掑汲閿濆洠鍋撶憴鍕閻㈩垱甯¢崺銉﹀緞婵犲孩鍍靛銈嗗坊閸嬫挾绱掗悩鍗炲祮婵﹦绮幏鍛驳鐎n亝顔勭紓鍌欒兌缁垳鏁垾宕囨殾闁硅揪闄勯崑鎰箾閼碱剛甯涢柡鍜佷邯閹嘲饪伴崘顔煎及濡ょ姷鍋涢悧鎾翠繆閹间礁鐓涘ù锝囧皑缁辨煡姊绘担铏瑰笡闁告梹娲熼、姘额敇閵忕姴鍋嶉梻鍌氱墛娓氭銆掓繝姘厪闁割偅绻冮ˉ鐐烘煟閹惧崬鍔﹂柡宀€鍠撻崰濠囧础閻愭澘鏋堥梻浣虹《閺備線宕戦幘鎰佹富闁靛牆妫楃粭鍌炴煠閸愭彃顣崇紒顔碱煼楠炴ḿ绱掑Ο鐓庡箺闂備焦瀵х换鍌毭洪妶澶婂偍閻庢稒锕╁▓浠嬫煟閹邦厽缍戞繛鎼枟椤ㄣ儵鎮欏顔煎壎閻庢鍣崳锝夊春閳ь剚銇勯幒鎴濐伒缂傚秵鐗滈埀顒€绠嶉崕閬嶅箠婢舵劕缁╅柤鎭掑劘娴滄粓鏌¢崘銊モ偓濠氬箺閸屾稓绠鹃柛顐ゅ枑閳锋劕菐閸パ嶈含妞ゃ垺娲熼弫鎰板幢韫囨柨顏哄┑鐘殿暯閳ь剙鍟跨痪褔鏌涢弮鈧悷鈺侇嚕椤愶箑绠荤紓浣股戝▍銏ゆ⒑鐠恒劌娅愰柟鍑ゆ嫹
        您的天气
          正在获取信息 ...
随笔 - 3461, 文章 - 0, 评论 - 739, 阅读 - 1200万
  管理

ASP.NET实用技巧

Posted on   lzhdim  阅读(490)  评论(0编辑  收藏  举报

本文主要介绍ASP.NET编程中的一些常用方法,内容涉及代码技巧、性能优化等方面。

      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还是有用的。

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2025年3月8日 星期六 【蛇】己卯月丙子日 乙巳年 二月初九 妇女节
您的IP:3.145.109.147,操作系统:未知操作系统,浏览器:未知浏览器
Copyright (C) 2000-2025 Lzhdim Software All Rights Reserved
点击右上角即可分享
微信分享提示