【问题标题】:sql c# delete syntax for div idsql c#删除div id的语法
【发布时间】:2011-07-26 06:56:02
【问题描述】:

大家好,我有一个与一些 Javascript 相关联的删除按钮,如下所示:

    <script type="text/javascript">
    function confirm_delete()
{
  if (confirm("Are you sure you want to delete this comment?")==true)
    return true;
  else
    return false;
}
</script>
<p>
<asp:Button ID="btn" OnClientClick="if(confirm_delete()){/* post back*/}else{return false;};" OnClick="btnDelete_Click" runat="server" Text="delete"/>

在我后面的代码中:

      using (OdbcCommand cmd = new OdbcCommand("SELECT idWallPosting, wp.WallPostings, p.PicturePath FROM WallPosting wp LEFT JOIN User u ON u.UserID = wp.UserID LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE wp.UserID=" + userId + " ORDER BY idWallPosting DESC", cn))
            {
                using (OdbcDataReader reader = cmd.ExecuteReader())
                {
                    test1.Controls.Clear();

                    while (reader.Read())
                    {

                        System.Web.UI.HtmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div");
                        div.Attributes["class"] = "test";


                        div.ID = String.Format("{0}", reader.GetString(0));
                        // the Div ID is set to my idWallPosting in my WallPosting Table
                        Image img = new Image();
                        img.ImageUrl = String.Format("{0}", reader.GetString(2));

                        img.AlternateText = "Test image";

                        div.Controls.Add(img);
                        div.Controls.Add(ParseControl(String.Format("&nbsp&nbsp&nbsp;" + "{0}", reader.GetString(1))));
                        div.Attributes.Add("onclick", "return confirm_delete();");

                        div.Style["clear"] = "both";
                        test1.Controls.Add(div);

                    }
                }
            }
        }
    }


protected void btnDelete_Click(object sender, EventArgs e)
{

    //serverside code if confirm was pressed to delete from WallPosting table based on Div ID.

}

dynamics 背后的代码的第一部分添加 div 并将 id = 添加到 idWallPosting 我认为我应该这样做,所以当它删除它们时,我所要做的就是引用 div.ID 但我不确定如何添加一个字符串以将 div id 转换为字符串,以便我可以将其传递给我的 sql 语法?

这必须从 html 端获取,而不是从服务器端获取,当 div 在执行时加载时,其输出如下所示:

(萤火虫)

<div id="ctl00_ContentPlaceHolder1_ContentPlaceHolder2_26"><div>

如何去掉 ct100 contentplaceholder 等以获得最后的数字 (26) 并将其作为字符串放在我的删除按钮中?

编辑:(帕特里克)

protected void btnDelete_Click(object sender, EventArgs e)
{
    idWallPosting = Div.ID;

    //serverside code if confirm was pressed.
        using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;"))
        {
            cn.Open();
            using (OdbcCommand cmd = new OdbcCommand("DELETE FROM WallPosting WHERE idWallPosting = "+idWallPosting+")", cn))
            {
                cmd.ExecuteNonQuery();
            }
        }
        PopulateWallPosts(); //error here

}

编辑:

protected void btnDelete_Click(object sender, EventArgs e)
{

    string id = "ctl00_ContentPlaceHolder1_ContentPlaceHolder2_26";
    string[] idFragments = id.Split('_');
    id = idFragments[idFragments.Length - 1];

    //serverside code if confirm was pressed.
        using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;"))
        {
            cn.Open();
            using (OdbcCommand cmd = new OdbcCommand("DELETE FROM WallPosting WHERE idWallPosting = " + id + ")", cn))
            {
                cmd.ExecuteNonQuery();
            }
        }
        //PopulateWallPosts();

}

什么都不做。

【问题讨论】:

    标签: c# javascript asp.net mysql sql


    【解决方案1】:

    那么,当单击 div 时,您想删除还是仅在单击按钮时删除?

    如果只是单击按钮,则可以使用CommandArgument 传递您的ID。

    如果是 div click 然后你需要再次将 id 传递给你的 confirm_delete 以获得参考。

    编辑:1

    查看您的代码和 cmets 除了执行ajax postback 之外别无他法,因为默认情况下单击 div 不会像 asp.net 按钮那样触发回发。而你想执行 div click 的 Button_Click 事件也是不对的。

    虽然我认为删除整个 div 不是一个好主意。如果用户不小心点击了 div 并弹出消息,那将是非常烦人的。

    编辑 2:

    如果有帮助,这里是一个示例:

    <div id="testdiv" runat="server">Hello world</div>
    
    //Pass record id to your confirm_delete
    int id = 10;
    testdiv.Attributes.Add("onclick", "return confirm_delete(" + id.ToString() + ");");
    
    //Updated confirm_delete function
    
    <script type="text/javascript">
            function confirm_delete(id){
                if (confirm('Are you sure you want to delete?')) {
                    __doPostBack('DivClicked', id);
                }
                else {
                    return false;
                }
            }
    </script>
    
    
    //This goes in your Page_Load code-behind
                if (Page.IsPostBack)
                {
                    //It is a postback so check if it was by div click
                    string target = Request["__EVENTTARGET"];
                    if (target == "DivClicked")
                    {
                        string id = Request["__EVENTARGUMENT"];
                        //Call you delete function passing record id
                        Response.Write(id.ToString());
                    }
                }
    

    【讨论】:

      【解决方案2】:

      如果您将 div 作为控件发送回服务器端......这就是您正在尝试做的事情(如果我错了,请原谅我)

      从看起来你正在设置 div 以便当你点击它们时......它要求在删除前确认?

      所以每次您点击一个 div 时,您都希望得到回复?

      只是把它扔出去......但使用 jquery 并进行 ajax 调用会更好。

      更新

      您可能会使用隐藏控件...

      <input id="tsIdValue" type="hidden" runat="server" />
      

      然后在服务器端,您可以通过使用从隐藏控件中获取值

      tsId = tsIdValue.value;
      

      当您构建您的 div 并调用 confirm_delete 方法时,您可能可以这样做:

      div.Attributes.Add("onclick", "return confirm_delete(this.id);"); 
      

      当您点击 div 时...您可能希望通过 javascript 将隐藏控件的值设置为 div 的 id。

       function confirm_delete(id)
      
          {
            if (confirm("Are you sure you want to delete this comment?")==true)
              tsIdValue.value = id;
              return true;
            else
              return false;
          }
      

      您仍然需要使用 __doPostBack() 调用让 javascript 导致回帖

      【讨论】:

      • 嘿,帕特里克,那是正确的,我将使用我试图实现的方法更新我的帖子,我还没有看到这个 sender.id.tostring be4,你能帮忙看看它应该放在哪里以及如何正确调用吗?
      • 我倾向于远离制作像“服务器按钮”这样的 div,在这种情况下,我会亲自创建一个处理程序,在 div 中创建一个“按钮”(如删除按钮或减号就像他们在 iphone/ipod 上使用的一样),然后根据 div 的 id 进行 ajax 调用...回发 div 点击并不是我真正的一杯茶。
      • 然后……我很可能将 div 构建为中继器或通过 ajax 和 json 构建 ..(在我看来,在这种情况下这将是一件好事)
      • 不幸的是,我不知道如何使用 ajax 或 json 等,这是我能想到的唯一快速方法。
      • @Patrik:应该直接分配给 div 的 ID 而不是 this.id,因此不需要进行拆分工作。
      【解决方案3】:

      使用 ASP.Net(.net 4.0 之前)它会自动将一些内容附加到 id 的开头以确保它是唯一的。所以简而言之,您将无法完全摆脱它,但您可以拆分出您的 Id 的相关部分以用于您的 sql 查询。我会这样做:

       //Note this is just for demonstration purposes you will need to actually get the Id of 
       //Id the control here
       string id = "ctl00_ContentPlaceHolder1_ContentPlaceHolder2_26";
       string[] idFragments = id.Split('_');
       id = idFragments[idFragments.Length - 1];
      

      这会在下划线字符上拆分 Id 字符串,然后返回结果数组中的最后一个元素。然后,您可以在 sql 查询中使用它。

      【讨论】:

      • 26 是动态的,可能是 15 或 500,请参阅下面的 patricks 方法,但我不确定如何实现它
      • 我实际上理解了那部分(=。因此上面的注释是我设置字符串 id = "" 部分的地方。
      猜你喜欢
      • 1970-01-01
      • 2011-03-03
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多