2011-08-30 61 views
0

我有一個複選框控制中繼器。 關於改變它的位值,它應該提示你想刪除的警報消息? ,如果選擇是,則應激發onselectedchange服務器事件。複選框服務器/客戶端事件

現在。點擊複選框我使用onclick事件來觸發提示,但它無法觸發服務器事件。

這裏是我的代碼解決這個片段

<script language="javascript" type="text/javascript"> 

function CheckedChange() { 
     if (confirm('Are you sure you want to delete?')) 
      return true; 
     else 
      return false; 
    } 
</script> 

<asp:Repeater ID="repQuestion" runat="server" onitemcommand="repQuestion_ItemCommand"             onitemdatabound="repQuestion_ItemDataBound"> 

<ItemTemplate> 
<table width="100%" cellspacing="0" cellpadding="0"> 
<tr> 
<td> 
<asp:CheckBox onclick="return CheckedChange();" ID="delete" runat="server" Checked='<%#DataBinder.Eval(Container.DataItem, "IsDeleted")%>' OnCheckedChanged="chkdelete_Click" /> 
</td> 
</tr> 
</table> 
</ItemTemplate> 
</asp:Repeater> 

回答

3

工作。

直放站。

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <table> 
      <tr> 
       <td><%# Eval("Index") %></td> 
       <td> 
        <asp:CheckBox ID="delete" runat="server" 
          AutoPostBack="true" 
          Checked='<%# Convert.ToBoolean(Eval("IsDeleted")) %>' 
          Enabled='<%# !Convert.ToBoolean(Eval("IsDeleted")) %>' 
          OnCheckedChanged="chkdelete_Click" 
          onclick="javascript:return CheckedChange(this)"/>    
       </td> 
      </tr> 
     </table> 
    </ItemTemplate> 
</asp:Repeater> 

的JavaScript

function CheckedChange(objCheckBox) { 
    if (confirm('Are you sure you want to delete?')) { 
     __doPostBack("'" + objCheckBox.id + "'", ''); 
     return true; 
    } 
    else { 
     objCheckBox.checked = false; 
     return false; 
    } 
} 

Page_Load事件

protected void Page_Load(object sender, EventArgs e) 
{ 
    try 
    { 
     if (!IsPostBack) 
     { 
      //bind gridview here 
      DataTable dataTable = new DataTable 
      { 
       Columns = { "Index", { "IsDeleted", typeof(bool) } } 
      }; 
      bool temp = true; 
      for (var i = 0; i < 6; i++) 
      { 
       dataTable.Rows.Add((i + 1).ToString(), temp); 
       temp = !temp; 
      } 

      Repeater1.DataSource = dataTable; 
      Repeater1.DataBind(); 
     } 
    } 
    catch (Exception exception) 
    { 
     //Elmah.ErrorSignal.FromCurrentContext().Raise(exception); 
    } 
} 

好吧,我不喜歡親自揭__doPostBack,但是這似乎是在這種情況下,唯一的辦法。

在不相關的一面注意,如果您顯示已刪除的項目,最好讓他們禁用。

+0

這是給JavaScript錯誤 「Microsoft JScript運行時錯誤:對象預期」 上的HTML代碼執行。 – Pankaj

+0

您正在運行哪個版本的asp.net。我正在運行4.0 – naveen

+0

我正在使用相同的版本 – Pankaj

1

嘗試通過傳遞UniqueID(即複選框的名稱)。

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <table> 
      <tr> 
       <td><%# Eval("Index") %></td> 
       <td> 
        <asp:CheckBox ID="delete" runat="server" 
          AutoPostBack="true" 
          Checked='<%# Convert.ToBoolean(Eval("IsDeleted")) %>' 
          Enabled='<%# !Convert.ToBoolean(Eval("IsDeleted")) %>' 
          OnCheckedChanged="chkdelete_Click" 
          onclick="javascript:return CheckedChange(this)"/>    
       </td> 
      </tr> 
     </table> 
    </ItemTemplate> 
</asp:Repeater> 

的JavaScript

function CheckedChange(objCheckBox) { 
    if (confirm('Are you sure you want to delete?')) { 
     __doPostBack("'" + objCheckBox.name + "'", ''); 
     return true; 
    } 
    else { 
     objCheckBox.checked = false; 
     return false; 
    } 
} 
+0

感謝您的回覆。 – Pankaj

0

試試這個

function confirmUser(checkBox) 
 
    { 
 
     if(checkBox.childNodes[0].checked === false){ 
 
      alert('Your alert message'); 
 
      } 
 
    }
<asp:Repeater ID="rptSelecteduserRoles" runat="server" OnItemDataBound="rptSelecteduserRoles_OnItemDataBound"> 
 
<ItemTemplate> 
 
                 
 
<asp:CheckBox ID="chkBox" CssClass="fieldLabel" AutoPostBack="False" onchange="confirmUser(this)"runat="server" Text='<%# Eval("Name") %>' /> 
 
                 
 
</ItemTemplate> 
 
</asp:Repeater>