2011-03-30 62 views
0

嗨我有一個刪除按鈕綁到一些JavaScript像這樣:SQL C#刪除語法DIV ID

<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(); 

} 

不執行任何操作。

回答

2

所以當div被點擊你想刪除或者你想刪除按鈕點擊只?

如果只是點擊按鈕,那麼你可以使用CommandArgument來傳遞你的ID。

如果它是div點擊然後再次你需要通過ID到你的confirm_delete獲得參考。

編輯:1

看你的代碼和註釋有沒有其他辦法,只能做一個ajax postback因爲點擊DIV不會默認像asp.net按鈕,觸發回發。並且您想要執行div點擊的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

如果您發送的股利回服務器端的控制..這是它看起來像你正在嘗試做的(原諒我,如果我錯了)

從它看起來像你正在設置divs,以便當你點擊它們時...它要求在刪除之前進行確認?

因此,每次點擊某個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);"); 

當你點擊分區...你想通過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; 
    } 

你仍然必須有JavaScript的導致後回用__doPostBack()呼叫

+0

嘿帕特里克那是正確的,我會更新我的職務與方法即時試圖實現的,我還沒有看到此發件人。 id.tostring be4你能幫助它應該放在哪裏以及如何正確調用? – 2011-03-30 18:02:54

+1

我傾向於遠離製作像這樣的「服務器按鈕」的div,在這種情況下,我會親自創建一個處理程序,在div中創建一個「按鈕」(如刪除按鈕或減號,就像他們在iphone上使用的那樣/ ipod),然後根據div的id做一個ajax調用...發佈一個div點擊不是真的是我的一杯茶。 – Patrick 2011-03-30 18:13:24

+1

然後再次...我會更可能建立divs作爲中繼器或通過ajax和json ..(在我的誠實oppinion會在這種情況下是一件好事) – Patrick 2011-03-30 18:14:31

1

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

+0

26時,它試圖嘗試這是一個嘗試26是動態的,它可能是15或500請參閱下面的帕特里克方法,但我不確定如何實現它 – 2011-03-30 18:05:36

+0

我實際上理解該部分(=。因此,上面的註釋正是我設置字符串id =「」部分。 – Adrian 2011-03-30 23:16:27