Ajax实现将可以编辑的表格与数据库交互

前端之家收集整理的这篇文章主要介绍了Ajax实现将可以编辑的表格与数据库交互前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Ajax实现将可以编辑的表格与数据库交互

2568人阅读 评论(15) 收藏 举报

上篇博客通过JQuery实现单击表格进行编辑的功能,本篇博客将继续延伸,将在此功能的基础之上,与数据库交互,实现真正的可编辑。

传统的网页,如果需要更新数据,需要更新整个页面,而Ajax可以通过在后台与服务器进行少量数据交换,使网页实现异步更新,是一种在无需加载整个网页的情况下, 能够更新部分网页的技术。

本篇博客上传我在项目用到的可以编辑的表格的源代码。继续丰富了上篇博客中的编辑效果,又与数据库进行交互,实现真正的可编辑。

Html页面代码

@H_301_48@
  • <divclass="span9">
  • <%--显示提示信息--%>
  • <asp:LabelID="Label1"runat="server"Text="说明:单击模块名称进行修改,回车或单击其它地方确定修改,ESC取消编辑。"ForeColor="Red"></asp:Label>
  • <%--局部更新--%>
  • <asp:ScriptManagerID="ScriptManager1"runat="server"></asp:ScriptManager>
  • <asp:UpdatePanelID="UpdatePanel1"runat="server">
  • <ContentTemplate>
  • <%--表格--%>
  • <tableclass="tabletable-striped">
  • <tr>
  • <th>模块ID</th>
  • <th>模块名称</th>
  • <th>删除</th>
  • </tr>
  • <%--绑定到Repeater--%>
  • <asp:RepeaterID="rptModel"runat="server">
  • <ItemTemplate>
  • <td><%#Eval("mdlID")%></td>
  • <tdclass="modelname"><%#Eval("mdlName")%></td>
  • <td>
  • <asp:LinkButtonID="lbtnDelete"runat="server"OnClick="lbtnDelete_Click"OnClientClick="returnconfirm('是否要真的删除?')"CommandArgument='<%#Eval("mdlID")%>'>删除</asp:LinkButton>
  • </td>
  • </ItemTemplate>
  • </asp:Repeater>
  • </table>
  • </ContentTemplate>
  • </asp:UpdatePanel>
  • <%--显示错误信息--%>
  • <divid="test"></div>
  • <%--添加模块名称--%>
  • <p>
  • <asp:LabelID="Label2"runat="server"Text="模块名称"></asp:Label>
  • <asp:TextBoxID="txtModelName"runat="server"></asp:TextBox>
  • <asp:ButtonID="btnAddModel"UseSubmitBehavior="false"runat="server"Text="添加"CssClass="btnbtn-info"OnClick="btnAddModel_Click"/>
  • </p>
  • </div>

  • 绑定信息代码

    [csharp] ?
      protectedvoidPage_Load(objectsender,EventArgse)
    1. {
    2. if(!Page.IsPostBack)
    3. //绑定模块信息
    4. ModelInfoMgrmodelInfoMgr=newModelInfoMgr();
    5. DataTabledt=newDataTable();
    6. //查询所有的模块信息
    7. dt=modelInfoMgr.SelectAll();
    8. //绑定
    9. rptModel.DataSource=dt;
    10. rptModel.DataBind();
    11. }
    12. }


    重头戏来了,JS代码

    [javascript] ?
      $(function(){
    1. $(".modelname").click(function(){//给页面中的modelname的标签加上click事件
    2. varobjTD=$(this);
    3. //alert("heheh");
    4. //点击后,内容变成文本框
    5. varoldText=$(this).text();//保存原来的文本
    6. varinput=$("<inputtype='text'value='"+oldText+"'/>");//文本框的HTML代码
    7. objTD.html(input);//td变为文本
    8. //设置文本框的点击事件失效
    9. input.click(function(){
    10. returnfalse;
    11. });
    12. //设置文本框的样式
    13. input.css("border-width",0);//边框为0
    14. input.css("margin",0);
    15. input.css("padding",0);
    16. input.css("color","black");
    17. //input.height(objTD.height);//文本框的高度为当前td的高度
    18. //input.width(objTD.width);
    19. input.trigger("focus").trigger("select");//全选
    20. //文本框失去焦点的时候变为文本
    21. input.blur(function(){
    22. varnewText=$(this).val();
    23. varinput_blur=$(this);
    24. //objTD.html(newText);
    25. //当原来的名称修改后的名称不同时才进行数据库提交操作
    26. if(oldText!=newText){
    27. //获取该模块名称对应的ID
    28. varmodelID=$.trim(objTD.prev().text());
    29. //AJAX异步更改数据库
    30. varurl="../handler/changeModelName.ashx?modelname="+encodeURI(encodeURI(newText))+"&modelID="+modelID+"&t="+newDate();
    31. $.get(url,function(data){
    32. if(data=="false"){
    33. $("#test").text("模块名称修改失败,请检查是否重复");
    34. input_blur.trigger("focus").trigger("select");//文本框全选
    35. }
    36. else{
    37. $("#test").text("");
    38. objTD.html(newText);
    39. //前后文本一样,将文本宽变成标签
    40. //在文本框中按下键盘某建
    41. input.keydown(function(){
    42. varjianzhi=event.keyCode;
    43. varinput_keydown=$(this);
    44. switch(jianzhi){
    45. case13://按下回车,保存修改
    46. varnewText=input_keydown.val();//修改后的名称
    47. //获取该模块名称对应的ID
    48. varmodelID=$.trim(objTD.prev().text());
    49. //AJAX异步更改数据库
    50. varurl="../handler/changeModelName.ashx?modelname="+encodeURI(encodeURI(newText))+"&modelID="+modelID+"&t="+newDate();
    51. function(data){
    52. if(data=="false"){
    53. $("#test").text("模块名称修改失败,请检查是否重复");
    54. input_keydown.trigger("focus").trigger("select");//文本框全选
    55. else{
    56. $("#test").text("");
    57. objTD.html(newText);
    58. break;
    59. case27://按下Esc,取消修改,吧文本框变成文本
    60. objTD.html(oldText);
    61. });
    62. //屏蔽Enter按键
    63. $(document).keydown(function(event){
    64. switch(event.keyCode){
    65. case13:returnfalse;
    66. });

    handler文件


    ?
      publicvoidProcessRequest(HttpContextcontext)
    1. context.Response.ContentType="text/plain";
    2. stringmodelid=context.Request.QueryString["modelID"];
    3. stringmodelname=context.Server.UrlDecode(context.Request.QueryString["modelname"]);
    4. //更改模块名称
    5. ModelInfoMgrmodelInfoMgr=newModelInfoMgr();
    6. ModelInfomodelInfo=newModelInfo();
    7. modelInfo.ID=modelid;
    8. modelInfo.Name=modelname;
    9. //判断是否已经存在
    10. if(modelInfoMgr.Exists(modelInfo))
    11. {
    12. context.Response.Write("false");
    13. return;
    14. boolflag=modelInfoMgr.Update(modelInfo);
    15. if(flag)
    16. context.Response.Write("true");
    17. else
    18. }


    效果图:

    如图中的提示,上面的代码做单击模块名称就可以进行修改,且回车或者单击其他地方确定修改,按ESC取消编辑。

    这是在牛腩老师的方法,希望在以后的学习中,可以领会此方法之外,能够更新知识和做法,也希望得到大牛的指导和点拨,再次感谢了。

    原文链接:https://www.f2er.com/ajax/163112.html

    猜你在找的Ajax相关文章