【轉】小知識1

1 .有時爲防止SQL注入須要過濾字符,如對Request.QueryString[]查詢字符串的過濾:javascript

 1  /// <summary>
 2         /// 過濾字符
 3         /// </summary>
 4         /// <param name="Input"></param>
 5         /// <returns></returns>
 6         public static string Filter(string sInput)
 7         {
 8             if (sInput == null || sInput == "")
 9                 return null;
10             string sInput1 = sInput.ToLower();
11             string output = sInput;
12             string pattern = @"*|and|exec|insert|select|delete|update|count|master|truncate|declare|char(|mid(|chr(|'";
13             if (Regex.Match(sInput1, Regex.Escape(pattern), RegexOptions.Compiled | RegexOptions.IgnoreCase).Success)
14             {
15                 throw new Exception("字符串中含有非法字符!");
16             }
17             else
18             {
19                 output = output.Replace("'", "''");
20             }
21             return output;
22         }

 

2 . 讓TextBox裏的文字換行css

<asp:TextBox ID="txt" TextMode="MultiLine" runat="server" Width="600" Height="100"></asp:TextBox>html

把TextBox的TextMode設爲MultiLine   用\r\n換行   txt.Text="我是第一行\r\n"+"我是第二行\r\n";java

3 . 爲repeater等控件綁定的數據添加一列,這一列能夠是刪除,詳細等jquery

 1 //dt是已經從數據庫中讀出來的數據,準備綁定到repeater控件上  
 2        if (dt != null)
 3             {
 4                 if (dt.Rows.Count > 0)
 5                 {
 6                     //添加列
 7                     dt.Columns.Add("op", typeof(string));
 8                     //添加操做列
 9                     for (int k = 0; dt.Rows.Count > k; k++)
10                     {
11                         dt.Rows[k]["op"] = "<a href=\"tbData_YH_Detail_list.aspx?Id=" + 
12 dt.Rows[k]["id"] + "\" class='list_link'>詳細</a>&nbsp;&nbsp;<a href=\"tbData_YH.aspx?
13 Type=ShenHe&Id=" + dt.Rows[k]["id"] + "\" class='list_link'>審覈</a>&nbsp;&nbsp;<a 
14 href=\"tbData_YH_update.aspx?Id=" + dt.Rows[k]["id"] + "\" class='list_link'>修改
15 </a>&nbsp;&nbsp;<a href=\"tbData_YH.aspx?Type=Del&id=" + dt.Rows[k]["id"] + "\" 
16 class='list_link' alt='刪除' onClick=\"{if(confirm('肯定要刪除嗎?')){return true;}return 
17 false;}\">刪除</a>&nbsp;&nbsp;<input type=\"checkbox\" name=\"aid\" value=\"" + dt.Rows[k]
18 ["id"] + "\" />";
19                     }
20                 }
21             }
22             repeater1.DataSource = dt;  
23             repeater1.DataBind(); 

Html代碼ajax

 1         <ItemTemplate>
 2                 <tr class="TR_BG_list"  onmouseover="overColor(this)" onmouseout="outColor(this)">
 3                     <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["ID"]%></td>
 4                     <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["tbDanWei"]%></td>
 5                     <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["tbTime"]%></td>
 6                     <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["sbND"]%></td>
 7                     <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["shenHeFlag"]%></td>
 8                     <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["op"]%></td>
 9                 </tr>
10            </ItemTemplate>

4 .<%%>與runat="server"控制元素的顯示與否數據庫

 1 <form id="form1" runat="server">
 2     <%if (visible){%>
 3     <div>
 4      <table>
 5     <tr><td>1111</td></tr>
 6     </table>
 7     </div>
 8     <%}%>
 9     <hr />
10     <div runat="server" id="div2">
11     <table>
12     <tr><td>2222</td></tr>
13     </table>
14     </div>
15      <asp:Button ID="Button2" runat="server" Text="顯示" onclick="Button2_Click"/>
16     <asp:Button ID="Button1" runat="server" Text="隱藏" onclick="Button1_Click" />
17     </form>

C#代碼json

 1         protected bool visible = true;
 2         protected void Button1_Click(object sender, EventArgs e)
 3         {
 4             visible = false;
 5             div2.Visible = false;
 6         }
 7 
 8         protected void Button2_Click(object sender, EventArgs e)
 9         {
10             visible = true;
11             div2.Visible = true;
12         }

5 . SqlserverHelper瀏覽器

http://blog.csdn.net/luxin10/article/details/7003095服務器

 

6.本身封裝的ASP.NET MVC地區選擇器控件(htmlhelper)

   調用頁

 

Html代碼
 1   @Html.AreaSelector("userArea", "37000000", 3, "AreaSelected")
 2                <script type="text/javascript">
 3                    function AreaSelected(data) {
 4                        $("#area").text(data.code + " " +data.parentName+" "+data.name);  
 5                    }
 6 
 7                    (function ($) {
 8                        $('#area-selector').click(function () {
 9                            userArea.showOrHide();
10                        });
11                        var left = $("#area-selector").offset().left;
12                        var top = $("#area-selector").offset().top;
13                        $(".tn-location").css("z-index","99").offset({left:left-20,top:top+25});
14                    })(jQuery);
15                </script>

 擴展HtmlHelper類

 

C#代碼
 1      /// <summary>
 2     /// 擴展HtmlHelper
 3     /// </summary>
 4     public static class HtmlHelperAreaSelectorExtensions
 5     {
 6         public static MvcHtmlString AreaSelector(this HtmlHelper htmlHelper,string id, string areaCode = null, int depth = 4, string callback = null)
 7         {
 8             if (string.IsNullOrEmpty(id))
 9             {
10                 throw new ArgumentException("參數名稱id不能爲空", "id");
11             }
12             htmlHelper.ViewData["id"] = id;
13             htmlHelper.ViewData["areaCode"] = areaCode;
14             htmlHelper.ViewData["depth"] = depth;
15             htmlHelper.ViewData["callback"] = callback;
16             //轉到控件頁
17             return htmlHelper.DisplayForModel("AreaSelector");
18         }
19     }

控件頁

 

Html代碼
  1 <div class="tn-widget tn-bubble tn-bubble-arrow-top tn-location" style="display: none; position:absolute; width: 300px;">
  2     <div class="tn-bubble-arrow">
  3         <b class="tn-arrow-b1 tn-border-gray"></b><b class="tn-arrow-b2 tn-widget-bubble">
  4         </b>
  5     </div>
  6     <div class="tn-bubble-content tn-widget-content tn-border-gray tn-corner-all">
  7         <div class="tn-text-heading tn-border-gray tn-border-bottom tn-helper-clearfix">
  8             <div class="tn-helper-right">
  9                 <span class="tn-valign">註冊地:<a href="#">山東</a>-<a href="#">青島</a></span> <a id="area-close" class="tn-icon tn-smallicon-cross tn-icon-inline">
 10                     刪除</a>
 11             </div>
 12             <span><a id="area-all" href="#">地區</a></span><span id="area-choose"></span>
 13         </div>
 14         <ul class="tnc-location-list tn-helper-clearfix">
 15             <li><a href="#" id="search-all-area"><strong>全部</strong></a></li>
 16             <dl></dl>
 17         </ul>
 18     </div>
 19 </div>
 20 <script id="areaTemplate" type="text/x-jquery-tmpl">
 21     <li data-area-code='${areaCode}' data-parent-code='${parentCode}' data-parent-name='${parentName}' data-depth='${depth}' data-name='${name}'><a href='#'>${name}</a></li>
 22 </script>
 23 <script type="text/javascript">
 24 (function ($) {
 25      var AreaSelector = function (areaCode, depth,callback) {
 26         this.areaCode = areaCode; //地區編碼
 27         this.depth = depth; //深度
 28         this.callback = callback; //回調函數
 29         
 30         this.init();
 31     };
 32 
 33     AreaSelector.fn = AreaSelector.prototype = {
 34         init: function() {
 35             var self = this; //提早保存當前對象AreaSelector
 36             //利用冒泡機制爲a標籤綁定單擊事件
 37             $(".tnc-location-list dl").delegate("a","click",function(){ 
 38                 var areaCode=$(this).closest('li').data('areaCode');
 39                 var depth=$(this).closest('li').data('depth');
 40                 var name=$(this).closest('li').data('name');
 41                 var parentName=$(this).closest('li').data('parentName');
 42                 //若是當前節點深度小於指定的深度就繼續讀取下一級節點
 43                 if (depth<self.depth) {                 
 44                     self.getAreas(areaCode); 
 45                 }else{
 46                     self.selected(areaCode,name,parentName);
 47                 }                   
 48             });
 49             //點地區
 50             $("#area-all").click(function(){
 51                self.getAreas(self.areaCode);
 52             });
 53             //點關閉
 54             $("#area-close").click(function(){
 55                $(".tn-location").hide();
 56             });
 57             //點全部
 58             $("#search-all-area").click(function(){
 59                var code=$("#search-all-area").data("areacode");
 60                var name=$("#search-all-area").data("areaname");
 61                self.selected(code,name,"");
 62             });
 63             this.getAreas(this.areaCode);
 64         },
 65 
 66         showOrHide: function() { 
 67             $(".tn-location").toggle();
 68         },
 69        
 70         getAreas: function(areaCode){
 71             var param = new Object();
 72             param.ParentCode = areaCode;
 73             $.getJSON('@Tunynet.Utilities.WebUtility.ResolveUrl("~/search/GetAreasByParentCode.aspx")',param,function(data){
 74             //json數據的綁定用的是jquery.tmpl.js
 75             if(data){
 76                 //設置地區>
 77                 $("#area-choose").text(">"+data[0].parentName);
 78                 //設置"全部"a標籤屬性
 79                 $("#search-all-area").data("areacode",data[0].parentCode);
 80                 $("#search-all-area").data("areaname",data[0].parentName);
 81                 $('.tn-location dl').empty();
 82                 $("#areaTemplate").tmpl(data).appendTo(".tn-location dl");
 83             }
 84             });    
 85         },
 86         
 87 
 88         selected: function (code, name,parentName) {
 89             var data = new Object();
 90             data.code=code;
 91             data.name=name;
 92             data.parentName=parentName;
 93         
 94             if (this.callback) {
 95                this.callback(data);
 96             }
 97         }
 98 
 99     };
100 
101     @(ViewData["id"]) = new AreaSelector(@(ViewData["areaCode"]),@(ViewData["depth"]), function (data) {    
102         @(ViewData["callback"])(data);
103     });
104 
105 })(jQuery);    
106     
107     
108 </script>

可將(function($){})(jQuery)改爲$(function(){}) 尤爲在IE6下 會彈出錯誤提示

 

7.正則 XSS

 

正則 http://deerchao.net/tutorials/regex/regex.htm

XSS http://extjs2.iteye.com/blog/505360

www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html

 

8.獲取js動態生成的元素的值

使用jquery插件livequery

1 $(".totalRecords").livequery(function () {
2             $(this).each(function () {
3                 totalRecords += parseInt($(this).val());
4             });
5             $("#globalTotalRecords").text(totalRecords);
6         })

.totalRecords就是經過js動態建立的元素

要注意livequery會改變原有的js執行順序,livequery會最後執行,這個具體狀況能夠設斷點看看。

補:

 

Js代碼
1 $('li').livequery('click', function (e) {
2             if ($(e.target).hasClass("className")) {
3                 return false;
4             }
5        });

這裏的li也是js動態加載過來的元素,當點擊li內的元素時,因爲冒泡事件,因此也會觸發li的冒泡事件,而後判斷單擊的元素若是有className這個類,就能夠進行阻止冒泡事件等操做

這有點像jquery的delegate函數(如上面的地區選擇器裏用到的delegate),但delegate的**(如上面地區選擇器的.tnc-location-list dl)是原來就在頁面上,而不是js動態加來的。

能夠看出這裏的e.target雖然是li的單擊事件裏,但它仍表明冒泡的源頭的那個元素。

 

9.用js屏蔽掉輸入框中自動記錄功能

 

<input type = password name = Password autocomplete = "off">

http://bbs.51js.com/thread-9125-1-1.html

 

10.上傳文件時Form表單的設置

<form  action="upjsp.jsp"  enctype="MULTIPART/FORM-DATA"  method=post>

<input  type="file"  name="filename"  />

另外表單提交方式必須設置爲method="post"

實現類ajax上傳文件

http://gzcj.iteye.com/blog/322699

http://bbs.csdn.net/topics/310038365

http://www.cnblogs.com/artech/archive/2012/08/15/action-result-03.html

但在asp.net mvc 中經過return javascript(string script)

提示Resource interpreted as Document but transferred with MIME type application/x-javascript

不知爲什麼不行,因而用了

 Response.Write("<script>parent.uploadCallback('upload file success')</script>");

 

Html代碼
1 <form target="hidden_frame" id="localCollocationImgForm" method="post" enctype="MULTIPART/FORM-DATA" action="@SiteUrls.Instance().UploadLocalColloctionImg(Url.SpaceKey())">
2 <input name="collocationImg" id="collocationImg" type="file" style='display:none'/>
3 <input tyoe="submit" id="collocationA">本地上傳</a>
4 <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
5 </form>
6 function uploadCallback(msg) {
7         alert(msg);
8     }

public void UploadLocalColloctionImg(string spaceKey)        

{

  HttpPostedFileBase postFile = Request.Files["collocationImg"];          

  Response.Write("<script>parent.uploadCallback('upload file success')</script>");

}

我在項目裏作的上傳標籤是用js模擬點擊的,尼瑪,在火狐及谷歌瀏覽器下是好用的,在尼瑪IE瀏覽器報錯:SCRIPT5: 拒絕訪問

原本覺得以上給出的方法有錯,但查了很久發現,原來是IE這坑爹的貨,查到的連接以下

http://bbs.csdn.net/topics/390305454?page=1

其實以上樓主只說對了一半,應該這樣說,在IE下,上傳文件模擬點擊了,就不要用js提交,能夠點擊提交表單的按鈕(草,點擊兩次)

 

11.瀏覽器端js url編碼 服務器端解碼

http://www.jb51.net/article/16271.htm

瀏覽器端js url編碼推薦使用 encodeURIComponent()

用encodeURIComponent()貌似服務器端可不用解碼

如要解碼可用Server.UrlDecode(string)

 

12.js判斷滾動條到頂及到底

 

http://zhidao.baidu.com/question/415493553.html?seed=0

$(window).scroll(function () {
            var a = $(document).scrollTop();
            if (a >= $(document).height() - $(window).height()) {
                alert("底");
            }
            if(a==0){
                alert("頂");
            }
        });

 

 

13.jQuery中的事件處理:return false、阻止默認行爲、阻止冒泡以及兼容性問題

 

 

return false

在jQuery中,咱們經常使用return false來阻止瀏覽器的默認行爲,那」return false「到底作了什麼?

當你每次調用」return false「的時候,它實際上作了3件事情:

event.preventDefault();

event.stopPropagation();

中止回調函數執行並當即返回。

對,你沒看錯,return false確實作了這麼多操做。它之因此被一再無誤用,是由於使用它後看起來像是完成了咱們的阻止任務,而且語句也很簡單。

這3件事中用來阻止瀏覽器繼續執行默認行爲的只有preventDefault,除非你想要中止事件冒泡,不然使用return false會爲你的代碼埋下很大的隱患。

 

preventDefault()

大多數狀況下,當你使用return false時,你其實真正須要的是e.preventDefault()。要使用e.preventDefault,你須要確保你傳遞了event參數到你的回掉函數中。它會替咱們完成全部工做,但不會阻止父節點繼續處理事件,要記住,你放在代碼中的限制越少,你的代碼就越靈活,也就越易於維護。

但在使用中你會發現preventDefault有兼容性問題,老版本的IE並不理會這個方法,依然我行我素,此時咱們須要一點兼容代碼來搞定IE:

window.event.returnValue=  false;//返回值設爲false

window.event.keyCode = 0;//若是你想阻止鍵盤的默認行爲,如F5,則這句也是須要的

 

stopPropagation()

有些狀況下,你有可能須要中止事件冒泡,直接使用stopPropagation便可。

 

stopImmediatePropagation()

這個方法會中止對象上相關事件的繼續執行,即便當前的對象上還綁定了其它處理函數。有時你的代碼很是複雜,不一樣的widgets和plugin就有可能在同一個對象上添加事件,若是遇到這種狀況,那你就頗有必要理解和使用stopImmediatePropagation。

相關文章
相關標籤/搜索