C# ASP.NET開發筆記(一)

最近開發一個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

οnclick="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 οnclick="javascript:myjs.top_message('changepassword.aspx');" target="mainFrame">

就會發現, 雖然可以實現其功能, 但當鼠標放到這個鏈接上時鼠標指針變成文本類型的指針了 (不是一個手指的指針) 

終于在網上找到了完美解決方法, 在 js 后加上 return false; 即:

<a href="" οnclick="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;
        }

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值