热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> AJAX编程>>正文内容

用jQuery中的Ajax方法,进行无刷新修改类别

发布时间:2010年04月30日点击数: 佚名

完整的操作流程:
1:点击类别名称,赋给一个onclick事件。
2:文字内容变成一个输入框,并且类别名称显示在输入框中。
3:修改输入框的内容。
4:点击页面其他地方时,输入框重新变回为文字,并且将用新输入的类别名取代之前的旧类别名。
5:并将新的类别名更新到数据库,完成整个过程。

aspx的页面代码如下,注意类别名要加一个class="canme",才方便用jquery来获取:

  1. <tr> 
  2.     <td height="25" align="center"><%# Eval("id") %></td> 
  3.     <td height="25" align="center" class="caname"><%# Eval("name") %></td> 
  4. <tr> 

首先,在Web层新建一个js文件,拷贝如下代码:

  1. /* 
  2.  * 说明:用Jquery的方法,无刷新页面,编辑表格 
  3.  */ 
  4.  
  5. $(function() { 
  6.     //给页面中有caname类的标签上加上click函数 
  7.     $(".caname").click(function() { 
  8.  
  9.         var objTD = $(this); 
  10.  
  11.         //先将老的类别名称保存起来,并用trim方法去掉左右多余的空格 
  12.         var oldText = $.trim(objTD.text()); 
  13.  
  14.         //构造一个input的标签对象(作用是为了让这个input失效,不然点击多次后,文字会消失) 
  15.         var input = $("<input type='text' value='" + oldText + "' />"); 
  16.  
  17.         //当前td的内容变为文本框,并且把老类别名放进去 
  18.         objTD.html(input); 
  19.  
  20.         //设置文本框的点击事件失效 
  21.         input.click(function() { 
  22.             return false
  23.         }); 
  24.  
  25.         //设置文本框样式,让界面显示的人性化点 
  26.         input.css("font-size""16px"); 
  27.         input.css("text-align""center"); 
  28.         input.css("background-color""#F7F2DE"); 
  29.         input.width("120px"); 
  30.  
  31.         //自动选中文本框中的文字 
  32.         input.select(); 
  33.  
  34.         //文本框失去焦点时重新变为文本 
  35.         input.blur(function() { 
  36.  
  37.             //获得新输入的类别名 
  38.             var newText = $(this).val(); 
  39.  
  40.             //当老类别名与修改后的类别名不同时才进行数据提交操作 
  41.             if (oldText != newText) { 
  42.  
  43.                 //获取该类别名所对应的ID(caId) 
  44.                 var caId = objTD.prev().text(); 
  45.  
  46.                 //将新的类别名进行转码,不然界面以及数据库显示的都是"???"这样的乱码 
  47.                 newText2 = escape(newText); 
  48.  
  49.                 //获取要传到"一般处理文件"(ChangeCaName.ashx)中的URL 
  50.                 var url = "../handler/ChangeCaName.ashx?caid=" + caId + "&caname=" + newText2; 
  51.  
  52.                 //AJAX异步更改数据库,data为成功后的回调返回值,用于判断结果提示 
  53.                 $.get(url, function(data) { 
  54.                     if (data == "false") { 
  55.                         //alert("类别修改失败,重复的类别名!"); 
  56.                         $("#div_id_msg").text("类别修改失败,重复的类别名!"); 
  57.                     } 
  58.                     else { 
  59.                         //用新的类别名文字替换之前变过来的输入框状态 
  60.                         objTD.html(newText); 
  61.                         $("#div_id_msg").text(""); 
  62.                         alert("类别修改成功!"); 
  63.                     } 
  64.                 }); 
  65.             } else { 
  66.                 //新旧类别名都一样时, 
  67.                 objTD.html(newText); 
  68.             } 
  69.         }); 
  70.  
  71.     }); 
  72. }); 

然后在Web层下新建一个文件夹(handler),在其下新建一个“一般处理程序”,也就是后缀为ashx的文件,拷贝以下代码:

  1. <%@ WebHandler Language="C#" Class="ChangeCaName" %> 
  2.  
  3. using System; 
  4. using System.Web; 
  5. using BLL; 
  6. using Model; 
  7.  
  8. public class ChangeCaName : IHttpHandler { 
  9.  
  10.     public void ProcessRequest(HttpContext context) 
  11.     { 
  12.         context.Response.ContentType = "text/plain"
  13.  
  14.         //从js传来的URL中获取值 
  15.         string caname = context.Request.QueryString["caname"]; 
  16.         string caId = context.Request.QueryString["caid"]; 
  17.  
  18.         //判断是据库中是否已存在同名类别 
  19.         if (!CategoryManager.IsExists(caname)) 
  20.         { 
  21.             //更改数据库的类别名 
  22.             Category ca = new Category(caId, caname); 
  23.             if (CategoryManager.Edit(ca)) 
  24.             { 
  25.                 context.Response.Write("类别修改成功!"); 
  26.             } 
  27.             else 
  28.             { 
  29.                 context.Response.Write("类别修改失败!"); 
  30.             } 
  31.         } 
  32.         else 
  33.         { 
  34.             context.Response.Write("类别名已存在!"); 
  35.             return
  36.         }         
  37.          
  38.     } 
  39.   
  40.     public bool IsReusable { 
  41.         get { 
  42.             return false
  43.         } 
  44.     } 
  45.  

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作