• 【转】小知识1


    1 .有时为防止SQL注入需要过滤字符,如对Request.QueryString[]查询字符串的过滤:

     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里的文字换行

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

    把TextBox的TextMode设为MultiLine   用 换行   txt.Text="我是第一行 "+"我是第二行 ";

    3 . 为repeater等控件绑定的数据添加一列,这一列可以是删除,详细等

     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代码

     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#代码

     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;  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。

     
  • 相关阅读:
    MongoDB 与 MySQL 性能比较
    PySpider简易教程
    使用redis有什么缺点
    禅道
    Shell02
    Shell01
    性能测试06
    性能测试05
    性能测试04
    性能测试03
  • 原文地址:https://www.cnblogs.com/gates/p/3461467.html
Copyright © 2020-2023  润新知