C# ASP.NET開發筆記(一)
来源:互联网 发布:禁毒网络知识竞赛答案 编辑:程序博客网 时间:2024/05/01 12:52
最近開發一個IT 運維報修的網站,因為時間比較緊,也沒有時間系統性的拿一本WEB開發的書來細看,匆匆忙忙就開始了,
還好有資深的WEB開發同事提供專業的意見, 已經到了收尾的階段了, 于是把一些遇到的問題寫成筆記存下來
1) 排版
<frameset rows="70,*" frameborder="1" framespacing="0" style="border-top:3px #CCC Ridge;border-left:3px #CCC Ridge;"> <frame id="tophtm" name="Top" src="top.htm" scrolling="no" noresize frameborder="0"/> <frameset cols="165,*" id="idFrame" name="mainMiddle" border="0" frameborder="0" framespacing="0"><frame name="LeftMenu" src="LeftMenu.htm" frameborder="0" noresize scrolling="no" /> <frame name="mainFrame" frameborder="0" src="Users.aspx" scrolling="auto" style="border:solid 1px #999999;"/></frameset></frameset>
使用frameset 的好處就是簡單,可以分成各種常規布局. 比如第1行先將屏幕分成上下兩塊, 上:70px, 剩下的70px以外的空間劃給下面,
第3行將剩下的空間分成左右兩部分, 左邊 165px, 剩下的分給右邊, 然后再分別設置這3塊對應的屬性.
2) 自定義 js 庫與調用
新增文件命名為 myjslib.js 加入到 vs2010的專案中, 在 <head> 和 </head>加入以下引用
<script src="Scripts/myjslib.js" type="text/javascript"></script>
就可以在 html 中調用了
(1)在頁面加載時調用
<script type="text/javascript" language="javascript"> window.onload = function load() { var url = window.location.href; alert(url); myjs.setpara(); } </script>
(2) onclick 事件調用 js
onclick="javascript:myjs.top_message('teststr');
myjslib.js 內容:
function myjslib() { this.setpara = setpara; this.getpara = getpara; this.sendcs = sendcs; this.top_message = top_message;}function top_message(hrefStr) { alert(hrefStr); window.top.mainFrame.location = hrefStr;}function getpara() { var url = window.location.href; var i = url.indexOf("?"); var result = ""; if (i > 0) result = url.substr(i + 1, url.length - i) return result;}
注意: js 中的函數要逐個驗證, 有一次因為粗心漏了一個 } 號, 結果調試時不管調用哪個函數都提示函數未定義, 白白浪費了很多時間來調試.
3) html 接收參數賦值給 htm dom 對象
如果一個頁面調用另一個 abc.htm 頁面,并且需要把編號和姓名傳遞給 abc.htm 頁面, abc.htm 再把兩個參數顯示出來.
假如調用方式為: abc.htm?no=007_name=零零漆
在 abc.htm中加入 window.onload 調用 js 函數
js函數中獲取當前 url, 即:abc.htm?no=007_name=零零漆
經過處理獲得變理 no=007, name=零零漆
在js函數中使用以下方式將變量值賦給文本 label
var test = document.getElementById("lblNo");lblNo.innerText = no; //innerText 表示修改文本內容
當然 如果希望 js 修改前臺控件其它屬性(比如超鏈接的跳轉地址): lblNo.href = "www.baidu.com";
4)C#后臺調用 js 函數
網上很多人說C#后臺調用js函數是不可能的, 不要理他們
有2個函數:
ClientScript.RegisterClientScriptBlock(this.GetType(), "msg", "test1()", true);
ClientScript.RegisterStartupScript(this.GetType(), "msg", "test1()", true);
都可以調用 js 中的 test1 函數, 比如修改 htm dom 對像的值需要使用第2個, 執行第1個會失敗. (執行順序的原因)
注意:如果前臺 html 沒有包含服務器控件(即: runat="server"), 那麼在 Page_Load中的 ClientScript.RegisterStartupScript 函數將不會被執行.
如需要了解兩個函數的區別請參考以下文章:
http://www.cnblogs.com/ice5/archive/2010/07/06/1772359.html
5)全局變量
如果系統性的從 web 開發基礎開始學習, 那這就不算是問題了.
向 web 開發同事請教, 原來是醬紫實現的:
定義一個 BaseClass.cs (名字可以隨便起), 繼承UI.Page, 然后定義需要的全局變量和函數(比如 IsLogin, UserName, Role 等等)
public class BaseClass : System.Web.UI.Page
在其它頁面中繼承 BaseClass, 就可以使用 BaseClass 中的全局變量和函數了.
6)讓dom對象超鏈接 a 調用 js
上面提到我的網頁的頂部是一個獨立的 htm 頁面, 如果點擊這個獨立 htm 頁面的超鏈接, 所跳轉的網頁會覆蓋整個頁面破壞之前的布局,
如果希望新的頁面只顯示在右下方區域, 就需要用到以下 js 自定義的函數
function top_message(hrefStr) { window.top.mainFrame.location = hrefStr; // mainFrame 是布局時定義的 frame 名稱 }
怎樣讓超鏈接 a 調用 js 呢?
如果把 href 參數去掉
<a onclick="javascript:myjs.top_message('changepassword.aspx');" target="mainFrame">
就會發現, 雖然可以實現其功能, 但當鼠標放到這個鏈接上時鼠標指針變成文本類型的指針了 (不是一個手指的指針)
終于在網上找到了完美解決方法, 在 js 后加上 return false; 即:
<a href="" onclick="javascript:myjs.top_message('changepassword.aspx');return false;" target="mainFrame">
網上的解釋為: 當超鏈接的 onclick 后面有 return false 后就會忽略 href 屬性.
7)調試時 js 中的 alert() 函數問題
調試時經常會用到 js 的 alert 函數, 結果被 alert 給耍了,
原來在一個 C# 的函數中調用了多次 alert, alert函數只會被執行一次.而且是在這個 C# 的函數運行完成后才執行的.
所以不建議在正式應用時在 C# 后臺使用 js alert 函數, 同時它還有另一個問題: 拖動 alert 彈出的內容,背景網頁會變花, (刷墻的感覺,真是biu 倍爽..)
8)html 文本垂直居中
設置 div height 與 line-height 相同即可, 當然最好加上 white-space:nowrap; overflow:hidden; 瀏覽器縮小時不會被擠壓換行
9)正則表達式
理論上網頁需要對所有的輸入進行驗證, 尤其是有些數據要寫入到后臺數據庫,
比如輸入數字時要先檢查, 對一個字符串直接進行 convert.int16() 是不推薦的做法,
再比如對需要錄入到數據庫的字符串中包含單引號(') , 很可能會報錯,
C#中表則表達式的內容比較多, 如果要自制比較復雜的函數需要參考正則表達式的詳細文檔,
以下是幾個常用的正則表達式函數:
/// <summary> /// 判斷字符串是否為正整數 /// </summary> /// <param name="_str"></param> /// <returns></returns> public bool IsInt(string _str) { return Regex.IsMatch(_str, @"^[0-9]+$"); }
/// <summary> /// 判斷字符串是否為字母數字下劃線漢字 /// </summary> /// <param name="_str"></param> /// <returns></returns> public bool IsABC_NUM_HZ_(string _str) { return Regex.IsMatch(_str, @"^\w+$"); }
/// 判斷字符串是否符合復雜度規則,包含數字,包含字母,包含特殊符號,8-20位之間 /// </summary> /// <param name="_str"></param> /// <returns></returns> public bool IsPasswordRule(string _str) { return Regex.IsMatch(_str, @"(?=.*[0-9])(?=.*[a-zA-Z])(?=([\x21-\x7e]+)[^a-zA-Z0-9]).{8,20}", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); }
/// <summary> /// 判斷字符串是否為漢字 /// </summary> /// <param name="_str"></param> /// <returns></returns> public bool IsHZ(string _str) { for (int i = 0; i < _str.Length; i++) { if (Regex.IsMatch(_str[i].ToString(), @"^[\u4E00-\u9FA5]+$")) return true; } return false; }
/// <summary> /// 判斷是否為 email 地址 /// </summary> /// <param name="_str"></param> /// <returns></returns> public bool IsEmail(string _str) { //如果包含漢字,則返回false if (IsHZ(_str)) return false; return Regex.IsMatch(_str, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); }
/// <summary> /// 判斷字符串是否為漢字,逐個字符檢查 /// </summary> /// <param name="_str"></param> /// <returns></returns> public bool IsHZ(string _str) { for (int i = 0; i < _str.Length; i++) { if (Regex.IsMatch(_str[i].ToString(), @"^[\u4E00-\u9FA5]+$")) return true; } return false; }
- C# ASP.NET開發筆記(一)
- 罗罗学ASP.Net With C# (一)
- ASP.Net C#学习笔记 一
- c# asp.net ajax 用法一例
- ASP.NET C# MVC 初学(一)
- ASP.NET C# MVC 初学(一)
- .NET 、C# 、ASP.NET
- ASP.NET 2.0之WebPart 一 (C#语言)
- ASP.NET 2.0之WebPart 一 (C#语言)
- ASP.NET C# VS2005一调试就关闭
- hjr-c#实习日记(一):asp .net web api
- 学习ASP.NET(一) 简单复习C#
- c# asp.net mvc 开发的正方教务助手(一)
- ASP.NET C#学习一(环境基础知识)
- asp.net(一)——c#基础
- C#函数(Asp.NET)
- Mappath C# ASP.net
- C# asp.net 求救
- spring security 介绍(一)
- Android消息处理机制(Handler、Looper、MessageQueue与Message)
- HTML5 块级元素与行内元素伦理片 http://www.dotdy.com/
- 百度 vs Facebook:基础架构研发思路分析
- Android EditText一键删除功能实现
- C# ASP.NET開發筆記(一)
- LibGDX_4.9: 动画(Animation)
- 介绍TCP/udp比较好的博客
- HDU 3836 Equivalent Sets 强连通分量
- 用位图解决大数据存储
- Maven实战读书笔记之三(Maven使用入门)
- Cocos-Js - Cocostudio在JS中的使用
- WebService “测试窗体只能用于来自本地计算机的请求”解决方法
- Linux_shell_ 进阶