1 .有时为防止SQL注入需要过滤字符,如对Request.QueryString[]查询字符串的过滤:
/// <summary> /// 过滤字符 /// </summary> /// <param name="Input"></param> /// <returns></returns> public static string Filter(string sInput) { if (sInput == null || sInput == "") return null; string sInput1 = sInput.ToLower(); string output = sInput; string pattern = @"*|and|exec|insert|select|delete|update|count|master|truncate|declare|char(|mid(|chr(|'"; if (Regex.Match(sInput1, Regex.Escape(pattern), RegexOptions.Compiled | RegexOptions.IgnoreCase).Success) { throw new Exception("字符串中含有非法字符!"); } else { output = output.Replace("'", "''"); } return output; }
2 . 让TextBox里的文字换行
<asp:TextBox ID="txt" TextMode="MultiLine" runat="server" Width="600" Height="100"></asp:TextBox>
把TextBox的TextMode设为MultiLine 用\r\n换行 txt.Text="我是第一行\r\n"+"我是第二行\r\n";
3 . 为repeater等控件绑定的数据添加一列,这一列可以是删除,详细等
//dt是已经从数据库中读出来的数据,准备绑定到repeater控件上 if (dt != null) { if (dt.Rows.Count > 0) { //添加列 dt.Columns.Add("op", typeof(string)); //添加操作列 for (int k = 0; dt.Rows.Count > k; k++) { dt.Rows[k]["op"] = "<a href=\"tbData_YH_Detail_list.aspx?Id=" + dt.Rows[k]["id"] + "\" class='list_link'>详细</a> <a href=\"tbData_YH.aspx? Type=ShenHe&Id=" + dt.Rows[k]["id"] + "\" class='list_link'>审核</a> <a href=\"tbData_YH_update.aspx?Id=" + dt.Rows[k]["id"] + "\" class='list_link'>修改 </a> <a href=\"tbData_YH.aspx?Type=Del&id=" + dt.Rows[k]["id"] + "\" class='list_link' alt='删除' onClick=\"{if(confirm('确定要删除吗?')){return true;}return false;}\">删除</a> <input type=\"checkbox\" name=\"aid\" value=\"" + dt.Rows[k] ["id"] + "\" />"; } } } repeater1.DataSource = dt; repeater1.DataBind();
<ItemTemplate> <tr class="TR_BG_list" onmouseover="overColor(this)" onmouseout="outColor(this)"> <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["ID"]%></td> <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["tbDanWei"]%></td> <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["tbTime"]%></td> <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["sbND"]%></td> <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["shenHeFlag"]%></td> <td align="center" valign="middle" ><%#((DataRowView)Container.DataItem)["op"]%></td> </tr> </ItemTemplate>
4 .<%%>与runat="server"控制元素的显示与否
<form id="form1" runat="server"> <%if (visible){%> <div> <table> <tr><td>1111</td></tr> </table> </div> <%}%> <hr /> <div runat="server" id="div2"> <table> <tr><td>2222</td></tr> </table> </div> <asp:Button ID="Button2" runat="server" Text="显示" onclick="Button2_Click"/> <asp:Button ID="Button1" runat="server" Text="隐藏" onclick="Button1_Click" /> </form>
protected bool visible = true; protected void Button1_Click(object sender, EventArgs e) { visible = false; div2.Visible = false; } protected void Button2_Click(object sender, EventArgs e) { visible = true; div2.Visible = true; }
5 . SqlserverHelper
http://blog.csdn.net/luxin10/article/details/7003095
6.自己封装的ASP.NET MVC地区选择器控件(htmlhelper)
调用页
@Html.AreaSelector("userArea", "37000000", 3, "AreaSelected") <script type="text/javascript"> function AreaSelected(data) { $("#area").text(data.code + " " +data.parentName+" "+data.name); } (function ($) { $('#area-selector').click(function () { userArea.showOrHide(); }); var left = $("#area-selector").offset().left; var top = $("#area-selector").offset().top; $(".tn-location").css("z-index","99").offset({left:left-20,top:top+25}); })(jQuery); </script>
扩展HtmlHelper类
/// <summary> /// 扩展HtmlHelper /// </summary> public static class HtmlHelperAreaSelectorExtensions { public static MvcHtmlString AreaSelector(this HtmlHelper htmlHelper,string id, string areaCode = null, int depth = 4, string callback = null) { if (string.IsNullOrEmpty(id)) { throw new ArgumentException("参数名称id不能为空", "id"); } htmlHelper.ViewData["id"] = id; htmlHelper.ViewData["areaCode"] = areaCode; htmlHelper.ViewData["depth"] = depth; htmlHelper.ViewData["callback"] = callback; //转到控件页 return htmlHelper.DisplayForModel("AreaSelector"); } }
控件页
<div class="tn-widget tn-bubble tn-bubble-arrow-top tn-location" style="display: none; position:absolute; width: 300px;"> <div class="tn-bubble-arrow"> <b class="tn-arrow-b1 tn-border-gray"></b><b class="tn-arrow-b2 tn-widget-bubble"> </b> </div> <div class="tn-bubble-content tn-widget-content tn-border-gray tn-corner-all"> <div class="tn-text-heading tn-border-gray tn-border-bottom tn-helper-clearfix"> <div class="tn-helper-right"> <span class="tn-valign">注册地:<a href="#">山东</a>-<a href="#">青岛</a></span> <a id="area-close" class="tn-icon tn-smallicon-cross tn-icon-inline"> 删除</a> </div> <span><a id="area-all" href="#">地区</a></span><span id="area-choose"></span> </div> <ul class="tnc-location-list tn-helper-clearfix"> <li><a href="#" id="search-all-area"><strong>所有</strong></a></li> <dl></dl> </ul> </div> </div> <script id="areaTemplate" type="text/x-jquery-tmpl"> <li data-area-code='${areaCode}' data-parent-code='${parentCode}' data-parent-name='${parentName}' data-depth='${depth}' data-name='${name}'><a href='#'>${name}</a></li> </script> <script type="text/javascript"> (function ($) { var AreaSelector = function (areaCode, depth,callback) { this.areaCode = areaCode; //地区编码 this.depth = depth; //深度 this.callback = callback; //回调函数 this.init(); }; AreaSelector.fn = AreaSelector.prototype = { init: function() { var self = this; //提前保存当前对象AreaSelector //利用冒泡机制为a标签绑定单击事件 $(".tnc-location-list dl").delegate("a","click",function(){ var areaCode=$(this).closest('li').data('areaCode'); var depth=$(this).closest('li').data('depth'); var name=$(this).closest('li').data('name'); var parentName=$(this).closest('li').data('parentName'); //如果当前节点深度小于指定的深度就继续读取下一级节点 if (depth<self.depth) { self.getAreas(areaCode); }else{ self.selected(areaCode,name,parentName); } }); //点地区 $("#area-all").click(function(){ self.getAreas(self.areaCode); }); //点关闭 $("#area-close").click(function(){ $(".tn-location").hide(); }); //点所有 $("#search-all-area").click(function(){ var code=$("#search-all-area").data("areacode"); var name=$("#search-all-area").data("areaname"); self.selected(code,name,""); }); this.getAreas(this.areaCode); }, showOrHide: function() { $(".tn-location").toggle(); }, getAreas: function(areaCode){ var param = new Object(); param.ParentCode = areaCode; $.getJSON('@Tunynet.Utilities.WebUtility.ResolveUrl("~/search/GetAreasByParentCode.aspx")',param,function(data){ //json数据的绑定用的是jquery.tmpl.js if(data){ //设置地区> $("#area-choose").text(">"+data[0].parentName); //设置"所有"a标签属性 $("#search-all-area").data("areacode",data[0].parentCode); $("#search-all-area").data("areaname",data[0].parentName); $('.tn-location dl').empty(); $("#areaTemplate").tmpl(data).appendTo(".tn-location dl"); } }); }, selected: function (code, name,parentName) { var data = new Object(); data.code=code; data.name=name; data.parentName=parentName; if (this.callback) { this.callback(data); } } }; @(ViewData["id"]) = new AreaSelector(@(ViewData["areaCode"]),@(ViewData["depth"]), function (data) { @(ViewData["callback"])(data); }); })(jQuery); </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
$(".totalRecords").livequery(function () { $(this).each(function () { totalRecords += parseInt($(this).val()); }); $("#globalTotalRecords").text(totalRecords); })
.totalRecords就是通过js动态创建的元素
要注意livequery会改变原有的js执行顺序,livequery会最后执行,这个具体情况可以设断点看看。
补:
$('li').livequery('click', function (e) { if ($(e.target).hasClass("className")) { return false; } });
这里的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"> |
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>");
<form target="hidden_frame" id="localCollocationImgForm" method="post" enctype="MULTIPART/FORM-DATA" action="@SiteUrls.Instance().UploadLocalColloctionImg(Url.SpaceKey())"> <input name="collocationImg" id="collocationImg" type="file" style='display:none'/> <input tyoe="submit" id="collocationA">本地上传</a> <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe> </form> function uploadCallback(msg) { alert(msg); }
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。
相关推荐
计算机基础知识涉及到许多关键的概念和技术,包括计算机的发展历程、硬件组成、存储设备、数据表示、操作系统等。 1. 计算机发展历程:文档中提到了1946年,这通常被认为是第一台电子计算机ENIAC(电子数值积分...
十一至十六部分分别列举了形容四季特点、繁荣景象、美物美景、山水风光、花草树木和日月风云的成语,丰富了学生对自然和生活的描绘。 十七、带有近义词的成语: 如“兴国安邦”、“甜言蜜语”,这些成语让学生理解...
SQL知识点大全 SQL 是结构化查询语言的缩写,用于管理关系数据库管理系统(RDBMS)。以下是 SQL 知识点大全,涵盖了 ...十一、数据库完整性的分类 数据库完整性可以分为实体完整性、参照完整性和用户定义的完整性。
### 小程序基础知识详解 #### 一、小程序文件结构概览 小程序的文件主要由四种类型组成:WXML、WXSS、JS 和 JSON。 - **WXML(WeiXin Markup Language)**:这是一种由微信定义的标记语言,类似于HTML,但具有...
在2021年人教版一年级数学下册的练习十一中,主要涵盖了两位数减一位数(不退位)和整十数的减法知识点。这些是小学生在数学学习初期必须掌握的基础运算技能。 首先,我们来看两位数减一位数(不退位)的情况。在...
【五年级数学下册复习练习题(十一)】 这篇文档主要涵盖了五年级数学下册的一些重要知识点,包括分数的理解、分数运算、分数的比较、分数的应用以及与分数相关的实际问题解决。以下是这些知识点的详细解释: 1. *...
#### 十一、Servlet里的监听器 监听器(Listener)用于监听Web应用程序中的特定事件,如应用程序启动、销毁或对象创建等。监听器可以通过实现相应的监听器接口来创建。 ```java public class ...
【知识点详解】 1. 分子与原子的基本概念: 分子是保持物质化学性质的最小微粒,...以上是对2020年中考化学专题训练十一中涉及的知识点的详细解析,涵盖了分子与原子的概念、性质、相互关系以及原子结构等核心内容。
十一、硬件调试 * 硬件调试等同于黑箱调试,如何快速分析、解决问题? * 大量调试经验的传授 * 如何加速硬件调试过程 * 如何迅速解决硬件调试问题 十二、软硬件联合调试 * 如何判别是软件的错? * 如何与软件进行...
【新精通版四年级下册小学英语全册单元知识点小结】 小学四年级下册的英语学习涵盖了多个单元,每个单元都有其特定的核心词汇、了解词汇、核心句型和了解句型。这些知识点旨在帮助学生建立基本的英语词汇量,理解和...
"小茅问答"可能是该应用内的一个特色板块,用户可以通过参与问答活动来学习茅台酒的相关知识。 【描述解析】 描述中的内容显示"4A景区,有最美酒厂之称的地方在哪里? 酒中酒厂",这提示我们这个问题是关于中国国家...
Cache 存储器是高速缓冲存储器,它的访问速度很高,但容量很小,有的甚至就做在 CPU 芯片内。Cache 起一个缓冲器的作用,其中保存着最近一段时间内刚刚从内存读来的信息。 五、内存地址 在内存中,每个基本单位都...
### 高级会计实务基础知识:企业风险管理流程及具体方法 #### 一、企业风险管理概述 企业风险管理是一项系统化的管理过程,旨在识别、评估并制定策略以应对企业面临的各种风险,确保企业的持续稳定发展。本章节...
以下是根据专题十一“写作技法指导”提炼出的关键知识点: 1. **审题要准** - **审读关键词**:审题时,首先要找出题目中的“题眼”,即揭示写作关键的词语。例如,“热门话题”的关键词是“热门”,意味着考生应...
#### 十一、VHDL和Verilog-HDL介绍 VHDL和Verilog是两种广泛使用的硬件描述语言,用于描述数字逻辑电路的行为和结构。掌握这两种语言的基本语法和设计技巧对于实现复杂的数字系统非常关键。 #### 十二、网络基础 ...
微机系统的发展历程是从电子管到晶体管、小规模集成电路、大规模集成电路等。微机系统的分类有大型机、小型机和微机等。 二、机箱(一般包括电源) 机箱是计算机系统的外壳,需要具有一定的硬度、合理的内部结构、...
#### 十一、儿童青少年饮品选择 - **知识点**: 不适合儿童青少年长期饮用的饮品。 - **详细解释**: 含乳饮料虽然味道好, 但通常含有较高的糖分和添加剂, 不建议儿童青少年长期大量饮用。相比之下, 新鲜牛奶、豆浆和...
本案例中的"小游戏源码-双十一抢钱.rar"是一个压缩文件,其中包含了用于构建一个双十一主题小游戏的所有源代码。源码通常包括了游戏的逻辑、界面设计、用户交互等多个方面,对于学习游戏开发或者想要修改现有游戏的...
前端小白-HTML基础知识学习总结
第五页以"小动物过河"为主题,可能是设计了一个实际情境的数学问题,让学生运用所学的乘法知识解决问题,比如小动物的数量与过河的次数之间的关系,这种情景教学可以提高学生的学习兴趣和参与度。 第六页到第八页...