内层中的Repeater中的按钮有时需要点击两次才执行,第一次点击的时候,页面也刷新,产生了回传。但是就是不执行
前台代码:
<asp:Repeater ID="rptBookType" runat="server" OnItemDataBound="rptBookType_ItemDataBound">
            <ItemTemplate>
                <tr class="tdBg1" style="background-color: #C9DFE4">
                    <td align="left" valign="middle">
                        <asp:Label ID="lblID" runat="server" Style="display: none;"></asp:Label>
                        <asp:Label ID="lblTypeName" runat="server" Style="display: "></asp:Label>
                        <asp:TextBox ID="txtTypeName" runat="server" Style="display: none"></asp:TextBox>
                    </td>
                    <td align="center" valign="middle">
                        <asp:Label ID="lblOrder" runat="server" Style="display: "></asp:Label>
                        <asp:TextBox ID="txtOrder" runat="server" Style="display: none"></asp:TextBox>
                    </td>
                    <td align="center" valign="middle">
                        <asp:CheckBox ID="chkFlag" runat="server" Enabled="false" />
                    </td>
                    <td align="center" valign="middle">
                        <asp:LinkButton ID="lbtnAddSun" runat="server" OnClick="lbtnAddSun_Click" Style="display: ">添加子类</asp:LinkButton>
                        <asp:LinkButton ID="lbtnEdit" runat="server" OnClick="lbtnEdit_Click">修改</asp:LinkButton>
                        <asp:LinkButton ID="lbtnDel" runat="server" OnClick="lbtbDel_Click" Style="display: ">删除</asp:LinkButton>
                        <asp:LinkButton ID="lbtnReset1" OnClick="lbtnReset_Click" runat="server" Style="display: none">取消</asp:LinkButton>
                    </td>
                </tr>
                <tr id="addSon" runat="server" class="tdBg1" style="display: none;">
                    <td align="left" valign="middle">
                        <asp:Label ID="lblPID" runat="server" Style="display: none;"></asp:Label>
                        <asp:Label ID="lblFName" runat="server"></asp:Label>
                        <asp:TextBox ID="txtAddBookName" runat="server"></asp:TextBox>
                    </td>
                    <td align="center" valign="middle">
                        <asp:TextBox ID="txtBookOrder" runat="server"></asp:TextBox>
                    </td>
                    <td align="center" valign="middle">
                        <asp:CheckBox ID="chkBookETFlag" runat="server" />
                    </td>
                    <td align="center" valign="middle">
                        <asp:LinkButton ID="lnkBookAdd" OnClick="lnkBookAdd_Click" runat="server">添加</asp:LinkButton>
                        <asp:LinkButton ID="lnkBookCancel" OnClick="lbtnReset_Click" runat="server">取消</asp:LinkButton>
                    </td>
                </tr>
                <asp:Repeater ID="rptBookTypeSon" runat="server" OnItemDataBound="rptBookTypeSon_ItemDataBound">
                    <ItemTemplate>
                        <tr class="tdBg1">
                            <td align="left" valign="middle">
                                <asp:Label ID="lblTypeName0" runat="server" Style="display: "></asp:Label>
                                <asp:TextBox ID="txtTypeName0" runat="server" Style="display: none"></asp:TextBox>
                            </td>
                            <td align="center" valign="middle">
                                <asp:Label ID="lblOrder0" runat="server" Style="display: "></asp:Label>
                                <asp:TextBox ID="txtOrder0" runat="server" Style="display: none"></asp:TextBox>
                            </td>
                            <td align="center" valign="middle">
                                <asp:CheckBox ID="chkFlag0" runat="server" Enabled="false" />
                            </td>
                            <td align="center" valign="middle">
                                <asp:LinkButton ID="lbtnEdit0" runat="server" OnClick="lbtnEdit0_Click">修改</asp:LinkButton>
                                <asp:LinkButton ID="lbtnDel0" runat="server" OnClick="lbtbDel0_Click" Style="display: ">删除</asp:LinkButton>
                                <asp:LinkButton ID="lbtnReset0" OnClick="lbtnReset_Click" runat="server" Style="display: none">取消</asp:LinkButton>
                            </td>
                        </tr>
                    </ItemTemplate>
                </asp:Repeater>
            </ItemTemplate>
        </asp:Repeater>
[/code]

解决方案 »

  1.   

    后台代码:
    protected void traversal()
            {
                for (int i = 0; i < rptBookType.Items.Count; i++)
                {
                    TextBox txtTypeName = (TextBox)rptBookType.Items[i].FindControl("txtTypeName");
                    Label lblTypeName = (Label)rptBookType.Items[i].FindControl("lblTypeName");
                    TextBox txtOrder = (TextBox)rptBookType.Items[i].FindControl("txtOrder");
                    Label lblOrder = (Label)rptBookType.Items[i].FindControl("lblOrder");
                    CheckBox chkFlag = (CheckBox)rptBookType.Items[i].FindControl("chkFlag");
                    LinkButton lbtnEdit = (LinkButton)rptBookType.Items[i].FindControl("lbtnEdit");
                    LinkButton lbtnAddSun = (LinkButton)rptBookType.Items[i].FindControl("lbtnAddSun");
                    LinkButton lbtnDel = (LinkButton)rptBookType.Items[i].FindControl("lbtnDel");
                    LinkButton lbtnReset1 = (LinkButton)rptBookType.Items[i].FindControl("lbtnReset1");
                    txtTypeName.Style.Add("display", "none");
                    lblTypeName.Style.Add("display", "");
                    txtOrder.Style.Add("display", "none");
                    lblOrder.Style.Add("display", "");
                    lbtnDel.Style.Add("display", "");
                    lbtnReset.Style.Add("display", "none");
                    lbtnAddSun.Style.Add("display", "");
                    Repeater rptBookTypeSon = (Repeater)rptBookType.Items[i].FindControl("rptBookTypeSon");
                    if (rptBookTypeSon != null)
                    {
                        for (int j = 0; j < rptBookTypeSon.Items.Count; j++)
                        {
                            TextBox txtTypeName0 = (TextBox)rptBookTypeSon.Items[j].FindControl("txtTypeName0");
                            Label lblTypeName0 = (Label)rptBookTypeSon.Items[j].FindControl("lblTypeName0");
                            TextBox txtOrder0 = (TextBox)rptBookTypeSon.Items[j].FindControl("txtOrder0");
                            Label lblOrder0 = (Label)rptBookTypeSon.Items[j].FindControl("lblOrder0");
                            CheckBox chkFlag0 = (CheckBox)rptBookTypeSon.Items[j].FindControl("chkFlag0");
                            LinkButton lbtnEdit0 = (LinkButton)rptBookTypeSon.Items[j].FindControl("lbtnEdit0");
                            LinkButton lbtnDel0 = (LinkButton)rptBookTypeSon.Items[j].FindControl("lbtnDel0");
                            LinkButton lbtnReset0 = (LinkButton)rptBookTypeSon.Items[j].FindControl("lbtnReset0");
                            txtTypeName0.Style.Add("display", "none");
                            lblTypeName0.Style.Add("display", "");
                            txtOrder0.Style.Add("display", "none");
                            lblOrder0.Style.Add("display", "");
                            lbtnEdit0.Style.Add("display", "");
                            lbtnDel0.Style.Add("display", "");
                            lbtnReset0.Style.Add("display", "none");
                        }
                    }
                }
            }protected void lbtnEdit0_Click(object sender, EventArgs e)
            {
                traversal();
                string[] id = ((LinkButton)sender).CommandArgument.Split(',');
                if (LTP.Common.CheckInput.CheckDigit(id[0].ToString()) && LTP.Common.CheckInput.CheckDigit(id[1].ToString()))
                {
                    for (int i = 0; i < rptBookType.Items.Count; i++)
                    {
                        if (((Label)rptBookType.Items[i].FindControl("lblID")).Text.Trim() == id[1].ToString())
                        {
                            Repeater rptBookTypeSon = (Repeater)rptBookType.Items[i].FindControl("rptBookTypeSon");
                            StringBuilder error = new StringBuilder();
                            int Index = ((RepeaterItem)(((LinkButton)sender)).NamingContainer).ItemIndex;
                            TextBox txtTypeName = (TextBox)rptBookTypeSon.Items[Index].FindControl("txtTypeName0");
                            Label lblTypeName = (Label)rptBookTypeSon.Items[Index].FindControl("lblTypeName0");
                            TextBox txtOrder = (TextBox)rptBookTypeSon.Items[Index].FindControl("txtOrder0");
                            Label lblOrder = (Label)rptBookTypeSon.Items[Index].FindControl("lblOrder0");
                            CheckBox chkFlag = (CheckBox)rptBookTypeSon.Items[Index].FindControl("chkFlag0");
                            LinkButton lbtnEdit = (LinkButton)rptBookTypeSon.Items[Index].FindControl("lbtnEdit0");
                            LinkButton lbtnDel0 = (LinkButton)rptBookTypeSon.Items[Index].FindControl("lbtnDel0");
                            LinkButton lbtnReset0 = (LinkButton)rptBookTypeSon.Items[Index].FindControl("lbtnReset0");
                            if (lbtnEdit.Text == "修改")
                            {
                                lbtnEdit.Text = "保存";
                                txtTypeName.Style.Add("display", "");
                                lblTypeName.Style.Add("display", "none");
                                txtOrder.Style.Add("display", "");
                                lblOrder.Style.Add("display", "none");
                                chkFlag.Enabled = true;
                                lbtnDel0.Style.Add("display", "none");
                                lbtnReset0.Style.Add("display", "");
                            }
                            else
                            {
                                lbtnEdit.Text = "修改";                            if (txtTypeName.Text.Trim() == "")
                                {
                                    error.Append("请输入图书类别名称!\\n");
                                }
                                if (txtOrder.Text.Trim() == "")
                                {
                                    error.Append("请输入排序号!\\n");
                                }
                                else if (!LTP.Common.CheckInput.CheckDigit(txtOrder.Text.Trim()))
                                {
                                    error.Append("排序号必须是数字!\\n");
                                }
                                if (!String.IsNullOrEmpty(error.ToString()))
                                {
                                    LTP.Common.MessageBox.Show(this, error.ToString());
                                    return;
                                }
                                BookShop.Model.T_PRD_BookType model = new Model.T_PRD_BookType();
                                model.ID = Convert.ToInt32(id[0].ToString());
                                model.ManagerID = new Guid(Session["UserID"].ToString());
                                model.ETFlag = !chkFlag.Checked;
                                model.OrderNum = int.Parse(txtOrder.Text.Trim());
                                model.TypeName = txtTypeName.Text.Trim();
                                model.BuildDate = DateTime.Now;
                                string res = bll_type.TypeUpdate(model);
                                Response.Redirect("BookTypeManage.aspx?keyword=" + LTP.Common.StringClass.EncodeUrl(this.lblkeyword.Text.Trim())
                                + "&keytype=" + LTP.Common.StringClass.EncodeUrl(this.lblType.Text.Trim()));
                            }
                        }
                    }
                }
                else
                {
                    LTP.Common.WindowClass.WindowBack("错误操作!");
                }
            }
      

  2.   

    添加repeater的itemcommand事件,linkbutton去除onclick,设置commandName属性作为判断条件,commandargument作为需要传递的参数。
    在itemCommand事件中,这样判断
    if(e.CommandName=="select")  //这个设定的commandname="select"
    {
      string Id=e.CommandArgument.ToString();  //获取参数
      //你的代码
    }
      

  3.   

    用webform做动态表格嵌套,很头疼。用asp.net mvc就比较好办了。