分享两个实用的ASP.NET开发技巧——使用WebMethod实现ajax和控件的ClientIDMode属性
2012-08-12 21:14
941 查看
一、首先来介绍的是ClientIDMode属性,该属性是.net 4.0才推出,可谓是千呼万唤始出来,关于它的官网介绍http://msdn.microsoft.com/zh-cn/library/system.web.ui.control.clientidmode.aspx。当然了msdn啰啰嗦嗦,我感觉对我最有用的就是在服务控件设置ClientIDMode="Static",注意任何WebForm的服务控件都具有该属性,包括设置为runat="server"的Html控件。首先来回归以前使用脚本控制服务端控件的场景,假设我有一个TextBox
那么我要在js里获取其值,只能使用嵌套服务端代码ClientID来得到它的ID,如下
这种取ID方式相当麻烦,但是现在有ClientIDMode,一切就好办了,看以下的控件设置,
然后就可以轻松的想一般HTML标签一样去获取它了
二、使用WebMethod实现ajax异步请求。
首先在后台代码文件aspx.cs的页面类里添加如下方法,很简单,该方法声明的WebMethod特性我想用过Web Service的一点都不陌生。
接着在页面编写相关的jquery,可惜的是这里只能用jq的ajax函数,而且格式要json,也不能是get请求方式。
细心的你可能发现data参数是一个json格式的字符串,是的没看错,只能这么写,当然了,如果说参数很多岂不写得麻烦,并且不能直接与json交互,也不方便,于是可以编写相应格式转化函数来帮我们完成这个操作,声明如下函数
最后上面的ajax函数里面的data参数就可以写成
这里有多个参数的话就跟一般的json写法一样,比如 jsonToString({name:'kevin',age:18}).值得注意的是后台声明的方法中,包含的参数必须在前端调用是传入,否则将报错而导致不能使用。这里的后台代码中声明为WebMethod的方法并不局限于当前页的后台代码文件,也就是说可以调用其他地方中声明的,只要当前项目包含有相应的程序集即可。
最后提醒一下,因为该方式还是基于Web Service,虽然其可以返回json或xml格式,但是大量使用可能对性能会有影响,建议如果是数据量比较大还是使用UpdatePanel或者异步请求一个独立的页面。
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
那么我要在js里获取其值,只能使用嵌套服务端代码ClientID来得到它的ID,如下
var dom = document.getElementById('<%= TextBox1.ClientID %>');
这种取ID方式相当麻烦,但是现在有ClientIDMode,一切就好办了,看以下的控件设置,
<asp:TextBox ID="TextBox1" ClientIDMode="Static" runat="server"></asp:TextBox>
然后就可以轻松的想一般HTML标签一样去获取它了
var dom = document.getElementById("TextBox1");
二、使用WebMethod实现ajax异步请求。
首先在后台代码文件aspx.cs的页面类里添加如下方法,很简单,该方法声明的WebMethod特性我想用过Web Service的一点都不陌生。
[System.Web.Services.WebMethod] public static string GetString(string name) { return "Hello " + name; }
接着在页面编写相关的jquery,可惜的是这里只能用jq的ajax函数,而且格式要json,也不能是get请求方式。
$.ajax({ type: "POST", url: "WebMethodDemo.aspx/GetString", async: false, data: "{'name':'kevin'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { alert(msg.d); }, error: function (msg) { alert(msg.responseText); }
});
细心的你可能发现data参数是一个json格式的字符串,是的没看错,只能这么写,当然了,如果说参数很多岂不写得麻烦,并且不能直接与json交互,也不方便,于是可以编写相应格式转化函数来帮我们完成这个操作,声明如下函数
//将json转化为可传值到WebMethod的string function jsonToString(json) { var arr = []; var fmt = function (s) { if (typeof s == 'object' && s != null) return jsonToString(s); return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s; } for (var i in json) arr.push("'" + i + "':" + fmt(json[i])); return '{' + arr.join(',') + '}'; }
最后上面的ajax函数里面的data参数就可以写成
data: jsonToString({name:'kevin'}),
这里有多个参数的话就跟一般的json写法一样,比如 jsonToString({name:'kevin',age:18}).值得注意的是后台声明的方法中,包含的参数必须在前端调用是传入,否则将报错而导致不能使用。这里的后台代码中声明为WebMethod的方法并不局限于当前页的后台代码文件,也就是说可以调用其他地方中声明的,只要当前项目包含有相应的程序集即可。
最后提醒一下,因为该方式还是基于Web Service,虽然其可以返回json或xml格式,但是大量使用可能对性能会有影响,建议如果是数据量比较大还是使用UpdatePanel或者异步请求一个独立的页面。
相关文章推荐
- asp.net控件开发技巧(1)使用HtmlTextWriter类规范输出标签
- asp.net部分控件使用和开发技巧总结
- ASP.NET控件开发基础之实现控件集合属性
- asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
- 新写的一个使用ASP.NET AJAX中的UpdatePanel控件实现GridView的无刷新删除,更新,添加,查询!
- 使用ASP.NET AJAX Control Toolkit中的ReorderList控件实现用鼠标拖动改变条目顺序
- 刀剑无影——使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
- asp.net控件开发基础(10) -- 集合属性的使用
- 经验技巧分享--ASP.NET和Ajax应用一个超级实用的设计模式---享元模式
- asp.net控件开发基础(10) --------再谈属性,实现自定义控件集合属性
- 分享ASP.NET使用Lodop控件实现Web打印功能
- asp.net控件开发技巧(1)使用HtmlTextWriter类规范输出标签
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较
- 页面间隔半秒钟更新时间 Asp.net使用Comet开发http长连接示例分享
- asp.net中使用自定义控件的方式实现一个分页控件的代码
- 技巧和诀窍:在ASP.NET AJAX UpdatePanel中实现对后退/前进按钮的支持
- Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)
- asp.net控件开发技巧(2)关闭基类不必要的功能
- Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)