【问题标题】:Checkbox server/client events复选框服务器/客户端事件
【发布时间】:2017-01-19 03:23:49
【问题描述】:

我在转发器控件中有一个复选框。 在更改它的位值时,它应该提示您希望删除的警报消息? 如果选择 yes,则应触发 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>

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    解决这个问题。

    中继器。

    <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,但这似乎是这种情况下的唯一方法。

    在不相关的旁注中,如果您正在显示已删除的项目,最好将它们显示为禁用。

    【讨论】:

    • 执行 html 代码时出现 javascript 错误“Microsoft JScript 运行时错误:预期对象”。
    • 您运行的是哪个版本的 asp.net。我正在运行 4.0
    • 我已经粘贴了我的工作 sn-p。你在做什么不同的事情?也许没有设置AutoPostBack=true
    • 我在这个线程中的最后一个问题 - 为什么不建议公开 __doPostBack ??
    • @Pankaj:因为那是框架版本相关的。假设在未来的迭代中,比如 asp.net 10.0,架构师倾向于使用__doit 回发,那么我们的代码将过时。 __dopostback 是他们给的名字,不能保证永远存在。
    【解决方案2】:

    尝试传递 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;
        }
    }
    

    【讨论】:

      【解决方案3】:

      试试这个

          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>

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 1970-01-01
        • 1970-01-01
        • 2015-05-10
        • 1970-01-01
        • 2012-11-04
        相关资源
        最近更新 更多