none
js 调用后台方法 RRS feed

  • 问题

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;

    public partial class Template_Default_PaperItem : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.ffff.Attributes.Add("onclick", "<script>var b = '<%=delete_Paper() %>';</script>");
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                SqlConnection cnt = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["WebAdminConnectionString"].ConnectionString);
                cnt.Open();
                SqlCommand cmdQuestions = new SqlCommand("", cnt);
                cmdQuestions.CommandText = "EXEC Delete_Paper @PaperId,@Domain";
                cmdQuestions.Parameters.AddWithValue("@PaperId", Convert.ToInt32(this.PaperId.Text.ToString()));
                cmdQuestions.Parameters.AddWithValue("@Domain", this.Request.Url.DnsSafeHost.ToString());
                cmdQuestions.ExecuteNonQuery();
                cnt.Close();
                Page.RegisterStartupScript("f5", "<script>alert('删除成功');</script>");

            }
            catch (Exception ee)
            {
                Page.RegisterStartupScript("f6", "<script>alert('删除失败');</script>");
            }
          
        }
    }
    上边是我的后台事件
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="PaperItem.ascx.cs" Inherits="Template_Default_PaperItem" %>
    <asp:HyperLink ID="HyperLink1" DataField="NUrl" BindProperty="NavigateUrl" runat="server"
        Target="_parent">
        <div style="width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
            <asp:Label ID="remark" DataField="remark" BindProperty="Text" runat="server"></asp:Label></div>
    </asp:HyperLink>
    <div id="a1" visible="false" runat="server">
        <asp:Label ID="PaperId" DataField="PaperId" BindProperty="Text" runat="server"></asp:Label></div>

     

    <div  id=ffff runat=server style="background-color: Lime;">
        删除</div>
    <%--<script>
        function ffff() {
            if (confirm("确认删除?")) {
                var b = "<%=delete_Paper() %>";
                if (b == 0) {
                    alert("删除失败");
                }
                else {
                    alert("删除成功");
                }
            }
        }
       
    </script>--%>
    上边是我的前台文件








    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="PaperItem.ascx.cs" Inherits="Template_Default_PaperItem" %>
    <asp:HyperLink ID="HyperLink1" DataField="NUrl" BindProperty="NavigateUrl" runat="server"
        Target="_parent">
        <div style="width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
            <asp:Label ID="remark" DataField="remark" BindProperty="Text" runat="server"></asp:Label></div>
    </asp:HyperLink>
    <div id="a1" visible="false" runat="server">
    这个 作用是绑定从数据库里面读出的数据   只是起到一个显示的作用  HyperLink 是我在查询的时候自己添加的一列url   目的是点击这条记录的时候跳到相应的页面
    <asp:Label ID="PaperId" DataField="PaperId" BindProperty="Text" runat="server"></asp:Label></div>
    这个是记录要删除那一条记录用的Id值



    我最后要实现的结果是

    2009年第一套测试题     删除

    当点击删除的时候  就把这一条记录删除   
    而那个删除按钮  不要是一个button按钮,因为不好定义样式    我就是想把这个删除的过程及显示弄的好看一些 
    所以我才想用js调用后台删除函数

    我用的工具是vs2008   数据库是简版的sql 2005

    • 已移动 孟宪会Moderator 2009年9月28日 9:46 (发件人:.NET Framework 一般性问题讨论区)
    • 已编辑 StaticYu 2009年9月29日 7:14
    2009年9月28日 9:05

答案

  • 一个完整的例子

    你创建一个表Table1,字段id,Title就可以测试了
    <%@ Page Language="C#" %>
    
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
      protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          SqlConnection cn = new SqlConnection();
          cn.ConnectionString = "Data Source=(local);Initial Catalog=pubs;User ID=sa;Password=sa";
          cn.Open();
          SqlCommand cmd;
          if (Request.QueryString["id"] != null)
          {
            cmd = new SqlCommand("delete from Table1 where id=@id", cn);
            cmd.Parameters.AddWithValue("@id", Request.QueryString["id"]);
            cmd.ExecuteNonQuery();
          }
          else
          {
            cmd = new SqlCommand("select * from Table1", cn);
            SqlDataReader dr = cmd.ExecuteReader();
            this.GridView1.DataSource = dr;
            this.GridView1.DataBind();
          }
          cn.Close();
        }
    
      }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    
      <script type="text/javascript">
        var http = null;
        function createXMLHTTP() {
          return window.XMLHttpRequest ? new window.XMLHttpRequest() : new window.ActiveXObject("MSXML2.XMLHTTP");
        }
        function DeleteData(num, obj) {
          http = createXMLHTTP()
          http.open("GET", "<%=Request.Url.ToString() %>?id=" + num + "&" + Date.parse(new Date()), true);
          http.onreadystatechange = function() {
            if (http.readyState == 4 && http.status == 200) {
              deleteTableRow(obj)
            }
    
          }
          http.send(null);
        }
    
        function deleteTableRow(o) {
          p = o.parentNode;
          while (p.tagName != "TR") {
            p = p.parentNode
          }
          if (p.tagName == "TR") {
            p.parentNode.removeChild(p)
          } 
        }
      </script>
    
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
          <Columns>
            <asp:TemplateField>
              <ItemTemplate>
                <%#Eval("Title") %></ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
              <ItemTemplate>
                <div onclick='DeleteData(<%#Eval("id") %>,this);return false;'>删除</div></ItemTemplate>
            </asp:TemplateField>
          </Columns>
        </asp:GridView>
      </div>
      </form>
    </body>
    </html>
    



    2009年10月6日 11:02
    版主

全部回复

  • 你的问题已经删除了是吗?
    【孟子E章】
    2009年9月28日 9:50
    版主
  • 没删除啊 !
    2009年9月29日 2:09
  • 你好!

    你可以使用下面的方式来达到确认删除的目的。

    <%@ Page Language="C#" AutoEventWireup="true"%>
    <script runat="server">
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write("确定删除");
        }
    </script>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" OnClientClick="return confirm('您确定要删除吗?');" />
        </div>
        </form>
    </body>
    </html>


    知识改变命运,奋斗成就人生!
    2009年9月29日 2:17
    版主
  • 你的删除按钮呢?是这个asp:HyperLink ID="HyperLink1" DataField="NUrl" BindProperty="NavigateUrl" runat="server"
        Target="_parent">链接吗?

    将你的记录id传递到链接,href="delete.aspx?id=xx">delete</a>

    在delete.aspx接收id的值,删除就可以了、

    【孟子E章】
    2009年9月29日 2:55
    版主
  •  MVP, 版主  你好?
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="PaperItem.ascx.cs" Inherits="Template_Default_PaperItem" %>
    <asp:HyperLink ID="HyperLink1" DataField="NUrl" BindProperty="NavigateUrl" runat="server"
        Target="_parent">
        <div style="width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
            <asp:Label ID="remark" DataField="remark" BindProperty="Text" runat="server"></asp:Label></div>
    </asp:HyperLink>
    <div id="a1" visible="false" runat="server">
    这个 作用是绑定从数据库里面读出的数据   只是起到一个显示的作用  HyperLink 是我在查询的时候自己添加的一列url   目的是点击这条记录的时候跳到相应的页面
    <asp:Label ID="PaperId" DataField="PaperId" BindProperty="Text" runat="server"></asp:Label></div>
    这个是记录要删除那一条记录用的Id值

    我最后要实现的结果是
    2009年第一套测试题     删除
    当点击删除的时候  就把这一条记录删除   
    而那个删除按钮  不要是一个button按钮,因为不好定义样式    我就是想把这个删除的过程及显示弄的好看一些 
    2009年9月29日 7:12
  • 呵呵,明白了,原来这个删除是你自己写的啊,要不我还问你是否这个问题自己解决了,自己删除了,误会。

    2009年第一套测试题     删除

    很好实现啊。你给删除链接传递 测试题的id就可以了。
    <asp:HyperLink ID="h" runat="server" NavigateUrl='Delete.aspx?id=xxx' Text="删除"></asp:HyperLink>

    如果是js删除,则需要使用ajax

    【孟子E章】
    • 已标记为答案 KeFang Chen 2009年9月30日 2:19
    • 取消答案标记 StaticYu 2009年10月6日 5:00
    2009年9月29日 8:12
    版主
  • 2009年第一套测试题     删除
    2009年第er套测试题     删除
    2009年第san套测试题     删除

    那个删除我放的不是连接  就是一个div     我想实现单击div时无刷新的删除数据   我后台有了一个删除方法,我事项用js函数去执行那个删除的方法 
    2009年10月6日 7:05
  • 一个完整的例子

    你创建一个表Table1,字段id,Title就可以测试了
    <%@ Page Language="C#" %>
    
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
      protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          SqlConnection cn = new SqlConnection();
          cn.ConnectionString = "Data Source=(local);Initial Catalog=pubs;User ID=sa;Password=sa";
          cn.Open();
          SqlCommand cmd;
          if (Request.QueryString["id"] != null)
          {
            cmd = new SqlCommand("delete from Table1 where id=@id", cn);
            cmd.Parameters.AddWithValue("@id", Request.QueryString["id"]);
            cmd.ExecuteNonQuery();
          }
          else
          {
            cmd = new SqlCommand("select * from Table1", cn);
            SqlDataReader dr = cmd.ExecuteReader();
            this.GridView1.DataSource = dr;
            this.GridView1.DataBind();
          }
          cn.Close();
        }
    
      }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    
      <script type="text/javascript">
        var http = null;
        function createXMLHTTP() {
          return window.XMLHttpRequest ? new window.XMLHttpRequest() : new window.ActiveXObject("MSXML2.XMLHTTP");
        }
        function DeleteData(num, obj) {
          http = createXMLHTTP()
          http.open("GET", "<%=Request.Url.ToString() %>?id=" + num + "&" + Date.parse(new Date()), true);
          http.onreadystatechange = function() {
            if (http.readyState == 4 && http.status == 200) {
              deleteTableRow(obj)
            }
    
          }
          http.send(null);
        }
    
        function deleteTableRow(o) {
          p = o.parentNode;
          while (p.tagName != "TR") {
            p = p.parentNode
          }
          if (p.tagName == "TR") {
            p.parentNode.removeChild(p)
          } 
        }
      </script>
    
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
          <Columns>
            <asp:TemplateField>
              <ItemTemplate>
                <%#Eval("Title") %></ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
              <ItemTemplate>
                <div onclick='DeleteData(<%#Eval("id") %>,this);return false;'>删除</div></ItemTemplate>
            </asp:TemplateField>
          </Columns>
        </asp:GridView>
      </div>
      </form>
    </body>
    </html>
    



    2009年10月6日 11:02
    版主
  • 谢谢

    2009年10月7日 0:43
  • 以上的例子只是一个思路,具体做法根据你的需求灵活掌握。
    【孟子E章】
    2009年10月7日 2:15
    版主
  • 大哥能写个详细的注释吗 ?我看不太明白

    2009年10月21日 4:40