簡體   English   中英

sql c#刪除div id的語法

[英]sql c# delete syntax for div id

嗨,我有一個與某些Java腳本綁定的刪除按鈕,如下所示:

    <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.

}

我后面的代碼的第一部分是動態添加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();

}

什么也沒做。

如果您將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導致發回郵件

因此,當單擊div時,您要刪除還是只單擊按鈕就刪除?

如果只是單擊按鈕,則可以使用CommandArgument傳遞您的ID。

如果是div,則再次需要將ID傳遞給您的Confirm_delete以獲取參考。

編輯:1

查看您的代碼和注釋,別無選擇,只能進行ajax回發,因為默認情況下,單擊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());
                }
            }

使用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查詢中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM