最近同学要做一个项目,需求是:音乐播放器。大致UI如图:

点击右边的“X”图标,可以删除当前选定的这首歌。因为现实界面的代码是复制过来的,并且前辈使用的是拼接字符串,然后绑定到页面的。没有使用ASP.NET服务器控件,所以要做点击图标,然后删除的事件,与我们平时开发有所不同了。我觉得有3中方案可以解决这个问题。

1.最坏的办法,把这个UI界面使用GridView呈现,GridView是服务器控件,所以最后一列可以是ImageButton,然后就有了服务器控件事件。解决起来就是,之前的原生态的HTML代码都删除掉,然后重新写代码。同学自己就是用的这种方式,这种方法便于理解,容易修改出来。

2.使用AJAX+Handler,就是用Ajax调用一个asp.net handler处理,handler处理的好处是,结构和代码进行了分离,这种方式也是容易接受。

3.使用ASP.NET自身的回调函数。具体参考:客户端回调实现 (C#) 示例  http://msdn.microsoft.com/zh-cn/library/ms178210.aspx 。

在MSDN实例中,客户端回调给出了一个解决方案:项目中需要在客户端使用JavaScr操作后台的C#代码,然后它底层实现这些原理,而这些原理都封装好了,我们按照它提供的接口和结构去实现就好了。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title>Client Callback Demo</title><script type="text/javascript">function deleteIt(_this) {var item = _this.parentNode.parentNode.firstChild.innerText;//alert(item);//alert("确定删除第 "+item+" 条记录吗?");CallServer(item,"");}function ReceiveServerData(rValue) {//document.getElementById("ResultSpan").innerHTML = rValue;alert(rValue + "页面重新加载中");//将页面刷新,重新读取数据库数据window.location.href = window.location.href}</script>
</head>
<body><form id="form1" runat="server"><div><%= result%></div></form>
</body>
</html>
result是后台生成的HTML代码段。
后台实例代码:
public partial class TestPage : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler{protected void Page_Load(object sender, EventArgs e){String cbReference = Page.ClientScript.GetCallbackEventReference(this,"arg","ReceiveServerData","context");//回调的JavaScriptString callbackScript;callbackScript = "function CallServer(arg,context)"+"{"+cbReference+";}";//向页面添加javas代码段Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);BindData();}protected string returnValue;public String result = "<table>";private void BindData(){DataTable mytable=new DataTable();mytable=GenerateData();for(int i=0;i<mytable.Rows.Count;i++){//第i行第0列的值//result = mytable.Rows[i][0].ToString();result += "<tr><td>" + mytable.Rows[i][0].ToString() + "</td>";result += "<td>" + mytable.Rows[i][1].ToString() + "</td>";result += "<td>" + mytable.Rows[i][2].ToString() + "</td>";result += "<td>" + mytable.Rows[i][3].ToString() + "</td>";result += "<td><input type='button' οnclick='deleteIt(this);' value='Delete'/></td></tr>";}result += "</table>";}//Generate the data in memory.protected DataTable GenerateData(){
……}public void RaiseCallbackEvent(String eventArgument){//实际情况上执行数据库删除操作,此处为了演示直接返回一个字符串。returnValue="删除第"+eventArgument+"记录成功!";}public string GetCallbackResult(){return returnValue;}}
RaiseCallbackEvent(String eventArgumnet)和GetCallbackResult()方法是实现ICallbackEventHandler接口。 、
    通过这中方法,可以完成客户端和服务器端之间的交互。当然这个实例中,页面最后还是要重新刷新的,以便重新render页面。
    这是我个人的想法,不知道有没有地方理解错了,还请前辈指点。谢谢。实例代码: http://file.cnblogs.com/liminjun88/ClientScript.zip

浅谈ASP.NET客户端回调相关推荐

  1. 浅谈ASP.NET的内部机制(一)

    浅谈ASP.NET的内部机制(一) 前言:当一个Http请求发送给一个aspx页面时,服务器进行了哪些操作?又如何来解析这个请求?ASP.NET在接收请求后是怎么运行的,如怎么编译以及怎么样用托管的代 ...

  2. 浅谈ASP.NET内部机制(五)

    浅谈ASP.NET内部机制(五) 前言:本章要谈页面生命周期了,过程挺多的,但是一点都不难.不信可以看看.我尽量的讲的平实一些,而且理解页面的生命周期对喜欢开发自定义控件和组件的朋友是很有帮助的. 系 ...

  3. 浅谈ASP.NET的内部机制(二)

    浅谈ASP.NET的内部机制(二)         前言:大家知不知道,一个Http Request是如何被传递给ASP.NET的?而且ASP.NET是如何知道一个 Http Request是请求的. ...

  4. 浅谈ASP.NET的Postback

    说道ASP.NET的Postback,就得说Web Page的生命周期,但是Web Page的生命周期却不是三言两语就能够说得清楚的,所以在这里单纯站的编程的角度,撇开Web Page 的生命周期浅谈 ...

  5. asp.net 客户端回调功能的实现机制探讨(响应部分及可能的优化)

    上一部分说道在发送前,已经将回调函数赋值成 xmlRequest.onreadystatechange=WebForm_CallbackComplete; 那么咱们就先来看看这个callback方法. ...

  6. 浅谈IM软件客户端的断线重连、心跳和长在线

    ----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...

  7. 浅谈ASP.NET 缓存技术

    缓存是指系统或应用程序将频繁使用的数据保存到内存中,当系统或应用程序再次使用时,能构快速的获取数据.它的弊端在于显示的内容可能不是最新,最精确的.ASP.Net 缓存主要分为两大类: 网页输出缓存和应 ...

  8. 浅谈ASP.NET中render方法

    2011-06-08 11:36 runyl 博客园 我要评论(1) 字号:T | T Control.Render 方法是将服务器控件内容发送到提供的HtmlTextWriter 对象,此对象编写将 ...

  9. 浅谈ASP.NET 4中构造“.NET研究”HTML5视频控件

    在本文中,将一步步地指导你如何使用Visual Studio 2010和ASP.NET 4的相关知识,打造一个基于HTML5标准规范的视频播放控件,其中你会学习到一些关于HTML 5的知识,还会学到如 ...

最新文章

  1. Ubuntu 常用命令收集
  2. RediSQL 0.8.0 发布,将查询结果写入流中
  3. mysql数据库英文句子翻译_MySQL文档翻译(八)附英文原文---性能优化概览
  4. C# 系统应用之获取Windows最近使用记录
  5. 编程判断元素归类_编程练习-判断是否为易混淆数
  6. 猜拳游戏html,JavaScript中实现猜拳小游戏
  7. 车险三者险可以垫付医药费吗?
  8. mac下virtualbox虚拟机centos联网问题
  9. 压力测试 Monkey 应用程序无响应ANR Application No Response(转)
  10. 微服务架构与API网关
  11. 财务数字变革新契机丨RPA应用于财务领域的5大场景
  12. r语言如何计算t分布临界值_医学统计与R语言:超几何分布(Hypergeometric distribution)与Fisher精确检验...
  13. matlab 0106,matlab中的plotyy
  14. 黑客游戏系列--------第二关
  15. 栈的push、pop序列-判断序列是否是栈的pop顺序
  16. linux断电并重启命令,Linux基本操作:关机 重启
  17. Hadoop分布式集群
  18. 大成都范围广告位招商
  19. linux中卸载rpm包,linux卸载rpm包
  20. java生成图片二维码

热门文章

  1. 国际化的支持--多编码问题
  2. pragma pack对齐方式详细介绍
  3. 《阿甘正传》,看了很多遍,是否留意到这个镜头???
  4. BI在企业数字化转型中的价值
  5. 大数据分析平台的发展趋势如何
  6. CentOS查看硬件情况
  7. html5 Canvas 绘制基本图形 从直线图形到使用路径 - 直线、矩形、路径、多边形、复杂组合图形
  8. pinia中文文档 指导文档中文翻译版 pinia指导中文翻译
  9. 使用CSS实现网格+渐变背景色的Web页面背景
  10. Oracle location,oracle秘境探索之11g tablespace prellocation