2011-12-06 103 views
1

我有一個gridview有一個包含動態添加的LinkBut​​tons的行。 當這些LinkBut​​ton被點擊時,我需要顯示一個確認對話框。 我想工作的建議在這篇文章: JQuery DIalog and ASP.NET Repeater ,但它不工作,postBackReference不包含正確的ID(它忽略佔位符) 這是我的代碼:jquery對話框和asp.net動態鏈接按鈕

GridView1_RowCreated(Object sender, GridViewRowEventArgs e) 
{ 
    //some code here 

    LinkButton lb = new LinkButton(); 
    lb.Text = "something"; 
    lb.ID = "someId"; 
    string postBackReference = ClientScript.GetPostBackEventReference(lb, string.Empty); 
    lb.OnClientClick = "javascript: showConf(function(){"+ postBackReference +"});return false;"; 

    TableCell cell = new TableCell(); 
    cell.Controls.Add(lb); 
    e.Row.Cells.Add(cell); 
} 

不任何人有一個想法?

+1

找到了!應該使用RowDataBound事件(用於註冊我的JS函數與asp.net __doPostback) –

+0

我明白你的意思。無論你是在'OnRowDataBound'還是'OnRowCreated'上執行,我都會使用你自己的** id添加一個額外的參數給'showConfirmation'函數,這樣你就不需要解析服務器端的id了了解您正在操作的記錄。我在答覆的評論部分提供了一些細節。 – Icarus

回答

2

所以這裏是爲我工作的解決方案: 基本上我根據這個職位的解決方案工作: JQuery DIalog and ASP.NET Repeater 唯一的區別是,我不得不使用RowCreated事件將我的動態了LinkBut​​ton的RowDataBound事件註冊我的客戶端函數(否則原始的__doPostBack將無法正確獲得ID參數(就好像它忽略了它在一個佔位符中的事實))。 所以我後面的代碼看起來像現在這樣:

GridView1_RowCreated(Object sender, GridViewRowEventArgs e) 
{ 
    //some code here 

    LinkButton lb = new LinkButton(); 
    lb.Text = "something"; 
    lb.ID = "someId"; 

    TableCell cell = new TableCell(); 
    cell.Controls.Add(lb); 
    e.Row.Cells.Add(cell); 
} 

和:

GridView1_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    //some code here 

    LinkButton lb = e.Row.FindControl("someId") as LinkButton; 
    string postBackReference = ClientScript.GetPostBackEventReference(lb, string.Empty); 
    lb.OnClientClick = "javascript: showConf(function(){"+ postBackReference +"});return false;"; 

} 

客戶端功能 - showConf和標記逗留他們。

+0

歡迎來到Stack Overflow!只要你有能力,一定要把你的答案標記爲已接受,這樣其他人就會知道有解決方案。 –

0

我不確切地知道JQuery在你的場景中扮演什麼角色。我想你想顯示某種花哨的確認框,如果你提供的細節,我會提供一個更具體的答案,但現在,這是怎麼用純JavaScript做:

GridView1_RowCreated(Object sender, GridViewRowEventArgs e) 
{ 

    LinkButton lb = new LinkButton(); 
    lb.Text = "something"; 
    lb.ID = "someId"; 
    lb.OnClientClick = "javascript: return confirm('Are you sure that you want to do this and that?'); "; 

    TableCell cell = new TableCell(); 
    cell.Controls.Add(lb); 
    e.Row.Cells.Add(cell); 
} 

UPDATE - 嘗試這樣的事情在你的標記JQuery的UI方法

  1. 有id爲 「對話框中,確認」 一個div像這樣:

    <div id="dialog-confirm" title="" ></div> 
    
  2. 定義一個名爲showConfirmation的JavaScript函數像這樣:

    function showConfirmation(confirmationMessage) 
    { 
         $("#dialog-confirm").dialog("destroy"); 
         $("#dialog-confirm").dialog({ 
         resizable: false, 
         height:140, 
         title: confirmationMessage, 
         modal: true, 
         buttons: { 
          "Yes": function() { 
           $(this).dialog("close"); 
           __doPostBack(linkItemID, '');//will cause postback 
          }, 
          Cancel: function() { 
           $(this).dialog("close"); 
          } 
         } 
        }); 
    return false; //it will never postback 
    } 
    
  3. 現在背後你的代碼應該是這樣的:

    GridView1_RowCreated(Object sender, GridViewRowEventArgs e) 
    { 
        LinkButton lb = new LinkButton(); 
        lb.Text = "something"; 
        lb.ID = "someId"; 
        lb.OnClientClick = "return showConfirmation('Are you sure you want to do this and that?','"+lb.ID+"'); "; 
        TableCell cell = new TableCell(); 
        cell.Controls.Add(lb); 
        e.Row.Cells.Add(cell); 
    } 
    

注:以上代碼尚未經過測試,但應該是非常接近你所需要的。

+0

對不起,忘了說,我想用jquery-ui對話框 –

+0

@ A.B.Cade:檢查我的更新 – Icarus

+0

只是用一個顯示jQuery UI對話框的函數替換返回確認。 – thiagoleite