c# - 在 Repeater 中传递行的 ID 以提交 ASP NET 中的按钮

标签 c# asp.net webforms

因为我使用了很多 View 状态,所以我试图停止依赖它们,因为页面需要永远加载。我有一个带表格的中继器,当我单击一个按钮时,它会启用一个具有另一个中继器的表单。我需要传递第一个转发器行的 ID,以便我可以在提交按钮上更新与该项目相关的数据。

注意。我需要的ID在转发器的第一列

<td>
    <asp:Label ID="lblIdRegisto" runat="server" Text='<%# Eval("ID_Registo") %>' Style="display: none;" />
    <asp:Label ID="lblReferenciaCliente" runat="server" Text='<%# Eval("Ref_Cliente") %>' />
</td>

这是我的代码

这是我的提交按钮

protected void btnValidarFormulario_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    {
        string cnnStr = ConfigurationManager.ConnectionStrings["ValidacaoFormas_ConnectionString"].ConnectionString;

        ADefinicao def = new ADefinicao();

        def.ReferenciaInterna = txtRefInterna.Text;
        def.Indice = txtIndice.Text;
        def.Observacoes = txtObservacoes.Text;
        def.isValid = "Sim";
        def.DataValidacao = DateTime.Now.ToString("dd-MM-yyyy").ToString();

        string nome = Session["Nome"].ToString();
        int id = Convert.ToInt32(ViewState["id"]);

        id = ADefinicao.UpdateADefinicao(nome, id, def);

        ScriptManager.RegisterStartupScript(this, this.GetType(), "key_name", "ShowToast('success','Documento validado com sucesso.'); setTimeout(function(){window.location.href ='/Conta/Início.aspx'}, 3000);", true);
    }
}

这是主中继器

<asp:Repeater ID="rptValidacao" runat="server" DataSourceID="SqlDataSource1" OnItemCommand="rptValidacao_ItemCommand">
    <HeaderTemplate>
        <table id="tblValidarRegistos" class="table table-bordered table-striped table-hover dataTable text-center">
        <thead class="thead-dark">
            <tr>
                <th class="text-center">Ref. Cliente</th>
                <th class="text-center">Ref. Interna</th>
                <th class="text-center">Índice</th>
                <th class="text-center">Qtd. Formas</th>
                <th class="text-center"></th>
            </tr>
        </thead>
    </HeaderTemplate>
    <ItemTemplate>
        <tr style="font-size:15px;">
            <td>
                <asp:Label ID="lblIdRegisto" runat="server" Text='<%# Eval("ID_Registo") %>' Style="display: none;" />
                <asp:Label ID="lblReferenciaCliente" runat="server" Text='<%# Eval("Ref_Cliente") %>' />
            </td>
            <td>
                <asp:Label ID="lblReferenciaInterna" runat="server" Text='<%# Eval("Ref_Interna") %>' />
            </td>
            <td>
                <asp:Label ID="lblIndicie" runat="server" Text='<%# Eval("Indice") %>' />
            </td>
            <td>
                <asp:Label ID="lblQTDFormas" runat="server" Text='<%# Eval("QTD_Formas") %>' />
            </td>
            <td>
                <asp:ImageButton ID="ibtnValidar" runat="server" ImageUrl="/Images/Icones/success.png" CommandName="Validar" CommandArgument='<%# Eval("ID_Registo") %>' Width="25" />                                    
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

我想知道是否有办法将 argument 从那个转发器传递到这个按钮

<asp:Button ID="btnValidarFormulario" CssClass="submit-button font-weight-bold" runat="server" Text="Validar Documentação" ValidationGroup="vgValidarDocumentacao"  OnClick="btnValidarFormulario_Click" />

编辑。

这是当 img 按钮点击带有一些数据的转发器时出现的表格,需要更新,它有点长,所以我只是因为被问到才发布。提交按钮在最后。我只需要表单上所有数据的来源ID,并将其传递给提交按钮

 <div id="divValidar" class="card card-danger shadow mx-auto custom-card-layout" visible="false" runat="server" style="min-width: 600px; max-width: 950px;">
    <div class="card-header text-center custom-card-header">
        <h3 class="card-title font-weight-bold">A - Definição</h3>
    </div>
    <!-- /.card-header -->

    <!-- form start -->
    <div class="card-body">

        <div class="container">

            <asp:ValidationSummary runat="server"
                ID="ValidationSummary2"
                DisplayMode="BulletList"
                HeaderText="<b>Preencha todos os campos devidamente para proseguir.</b>"
                ValidationGroup="vgADefinicao"
                CssClass="alert validation-summary"
                ShowSummary="true" />


            <fieldset>
                <legend>Informação Referêncial</legend>


                <div class="row justify-content-center">

                    <div class="col-sm-4">
                        <div class="form-group col-10 mx-auto text-center">
                            <asp:Label ID="lblRefCliente" Text="1. Referência Cliente" AssociatedControlID="txtRefCliente" runat="server"></asp:Label>
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <asp:TextBox ID="txtRefCliente" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>


                        </div>
                    </div>

                    <div class="col-sm-4">
                        <div class="form-group col-10 mx-auto">
                            <asp:Label ID="lblRefInterna" Text="2. Referência Interna" AssociatedControlID="txtRefInterna" runat="server"></asp:Label>
                            <asp:TextBox ID="txtRefInterna" CssClass="form-control form-control-sm border border-dark" runat="server" placeholder="Referência Interna"></asp:TextBox>
                        </div>
                    </div>


                    <div class="col-sm-4">
                        <div class="form-group col-10 mx-auto">
                            <asp:Label ID="lblIndice" Text="3. Índice" AssociatedControlID="txtIndice" runat="server"></asp:Label>
                            <asp:TextBox ID="txtIndice" CssClass="form-control form-control-sm border border-dark" runat="server" placeholder="Indíce"></asp:TextBox>
                        </div>
                    </div>
                </div>

            </fieldset>

            <fieldset>
                <legend>Casquilhos e Formas - Quantidade</legend>


                <div class="row justify-content-center pb-4">

                    <div class="col-md-6">
                    </div>

                    <div class="col-md-6 text-center">
                        <strong>5. Quantidade de Casquilhos</strong>
                    </div>
                </div>

                <div class="row justify-content-center row-eq-height">
                    <div class="col-md-6">


                        <div class="form-group col-7 mx-auto text-center">
                            <asp:Label ID="lblQtdFormas" Text="4. Quantidade de Formas" AssociatedControlID="txtQtdFormas" runat="server"></asp:Label>
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <asp:TextBox ID="txtQtdFormas" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>

                        </div>

                    </div>

                    <div class="col-md-6">


                        <div class="form-group col-7 mx-auto text-center">
                            <asp:Label ID="lblCasquilhosFixos" Text="5.1 Fixos" AssociatedControlID="txtCasquilhosFixos" runat="server"></asp:Label>
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <asp:TextBox ID="txtCasquilhosFixos" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>

                        </div>

                        <div class="form-group col-7 mx-auto text-center">
                            <asp:Label ID="lblCasquilhosLivres" Text="5.2 Livres" AssociatedControlID="txtCasquilhosLivres" runat="server"></asp:Label>
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <asp:TextBox ID="txtCasquilhosLivres" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>

                        </div>

                    </div>
                </div>
            </fieldset>


            <fieldset>
                <legend>Casquilhos e Formas - Diâmetros</legend>


                <div class="row justify-content-center pb-4">

                    <div class="col-md-6 text-center">
                        <strong>6. Diâmetro dos casquilhos</strong>
                    </div>

                    <div class="col-md-6 text-center">
                        <strong>7. Diâmetro das formas</strong>
                    </div>

                </div>


                <div class="row justify-content-center">
                    <div class="col-md-6">
                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblDiametroCasqLadoFixo" Text="6.1 Lado Fixo" AssociatedControlID="txtDiametroCasqLadoFixo" runat="server"></asp:Label>
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>

                            <div class="input-group input-group-sm">
                                <asp:TextBox ID="txtDiametroCasqLadoFixo" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>
                                <div class="input-group-append border border-dark">
                                    <span class="input-group-text"><strong>mm</strong></span>
                                </div>
                            </div>

                        </div>
                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblDiametroCasqLadoMovel" Text="7.2 Lado Móvel" AssociatedControlID="lblDiametroCasqLadoMovel" runat="server"></asp:Label>
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <div class="input-group input-group-sm">

                                <asp:TextBox ID="txtDiametroCasqLadoMovel" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>
                                <div class="input-group-append border border-dark">
                                    <span class="input-group-text"><strong>mm</strong></span>
                                </div>
                            </div>

                        </div>

                    </div>

                    <div class="col-md-6">

                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblDiametroFormasFixo" Text="7.1 Lado fixo" AssociatedControlID="txtDiametroFormasFixo" runat="server"></asp:Label>
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <div class="input-group input-group-sm">

                                <asp:TextBox ID="txtDiametroFormasFixo" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>
                                <div class="input-group-append border border-dark">
                                    <span class="input-group-text"><strong>mm</strong></span>
                                </div>
                            </div>


                        </div>

                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblDiametroFormasMovel" Text="7.2 Lado Móvel" AssociatedControlID="txtDiametroFormasMovel" runat="server"></asp:Label>
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <div class="input-group input-group-sm">
                                <asp:TextBox ID="txtDiametroFormasMovel" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>
                                <div class="input-group-append border border-dark">
                                    <span class="input-group-text"><strong>mm</strong></span>
                                </div>
                            </div>

                        </div>
                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblDiametroFormasCorpo" Text="7.2 Corpo" AssociatedControlID="txtDiametroFormasCorpo" runat="server"></asp:Label>
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <div class="input-group input-group-sm">

                                <asp:TextBox ID="txtDiametroFormasCorpo" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>
                                <div class="input-group-append border border-dark">
                                    <span class="input-group-text"><strong>mm</strong></span>
                                </div>
                            </div>

                        </div>
                    </div>
                </div>

            </fieldset>


            <fieldset>
                <legend>Cru
                    <small>(A preencher pela Extrusão)</small>
                </legend>

                <div class="row justify-content-center pb-4">

                    <div class="col-md-6 text-center">
                        <strong>8. Informação do Cru</strong>
                    </div>

                    <div class="col-md-6 text-center">
                        <strong>8.3 Parâmetros do cru:</strong>
                    </div>

                </div>

                <div class="row justify-content-center">

                    <div class="col-md-6">

                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblCruBase" Text="8.1 Base" AssociatedControlID="txtCruBase" runat="server"></asp:Label>
                            <asp:TextBox ID="txtCruBase" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>
                        </div>

                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblCruLinha" Text="8.2 Linha" AssociatedControlID="txtCruLinha" runat="server"></asp:Label>
                            <asp:TextBox ID="txtCruLinha" CssClass="form-control form-control-smborder border-dark" runat="server" ReadOnly="true"></asp:TextBox>
                        </div>

                        <div class="form-group col-10 mx-auto text-center">
                            <asp:Label ID="lblMarcacaoContinua" Text="8.4 Marcação contínua" AssociatedControlID="txtMarcacaoContinua" runat="server" />
                            <small class="text-muted">(texto + cor)</small>
                            <asp:TextBox ID="txtMarcacaoContinua" TextMode="MultiLine" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true" />
                        </div>

                    </div>

                    <div class="col-md-6">

                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblCruDiametro" Text="Diâmetro" AssociatedControlID="txtCruDiametro" runat="server"></asp:Label>
                            <div class="input-group input-group-sm">
                                <asp:TextBox ID="txtCruDiametro" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>
                                <div class="input-group-append border border-dark">
                                    <span class="input-group-text"><strong>mm</strong></span>
                                </div>
                            </div>
                        </div>

                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblCruEspessura" Text="Espessura" AssociatedControlID="txtCruEspessura" runat="server"></asp:Label>

                            <div class="input-group input-group-sm">
                                <asp:TextBox ID="txtCruEspessura" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>
                                <div class="input-group-append border border-dark">
                                    <span class="input-group-text"><strong>mm</strong></span>
                                </div>

                            </div>
                        </div>

                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblComprimento" Text="Comprimento" AssociatedControlID="txtComprimento" runat="server"></asp:Label>
                            <div class="input-group input-group-sm">
                                <asp:TextBox ID="txtComprimento" CssClass="form-control form-control-sm border border-dark" runat="server" ReadOnly="true"></asp:TextBox>
                                <div class="input-group-append border border-dark">
                                    <span class="input-group-text"><strong>mm</strong></span>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

            </fieldset>


            <fieldset>
                <legend>9. Datas Previstas</legend>

                <div class="row justify-content-center">

                    <div class="col-md-6">

                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblDataFormasPreSerie" runat="server" AssociatedControlID="txtReadOnlyDataFormasPreSerie" Text="9.1 Formas Pré-Série" />
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <div class="input-group input-group-sm">
                                <div class="input-group-prepend border border-dark">
                                    <span class="input-group-text"><i class="far fa-calendar-alt"></i></span>
                                </div>
                                <asp:TextBox ID="txtReadOnlyDataFormasPreSerie" runat="server" class="form-control form-control-sm border border-dark" ReadOnly="true" />
                            </div>

                        </div>

                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblDataFormasSerie" runat="server" AssociatedControlID="txtReadOnlyDataFormasSerie" Text="9.3 Formas Série" />
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <div class="input-group input-group-sm">
                                <div class="input-group-prepend border border-dark">
                                    <span class="input-group-text"><i class="far fa-calendar-alt"></i></span>
                                </div>
                                <asp:TextBox ID="txtReadOnlyDataFormasSerie" runat="server" class="form-control form-control-sm border border-dark" ReadOnly="true" />
                            </div>
                        </div>

                    </div>

                    <div class="col-md-6">


                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblDataAmostrasIniciais" runat="server" AssociatedControlID="txtReadOnlyDataAmostrasIniciais" Text="9.2 Amostras iniciais" />
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <div class="input-group input-group-sm">
                                <div class="input-group-prepend border border-dark">
                                    <span class="input-group-text"><i class="far fa-calendar-alt"></i></span>
                                </div>
                                <asp:TextBox ID="txtReadOnlyDataAmostrasIniciais" runat="server" class="form-control form-control-sm border border-dark" ReadOnly="true" />
                            </div>

                        </div>

                        <div class="form-group col-6 mx-auto text-center">
                            <asp:Label ID="lblDataArranqueProducao" runat="server" AssociatedControlID="txtReadOnlyDataArranqueProducao" Text="9.4 Arranque Produção" />
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <div class="input-group input-group-sm">
                                <div class="input-group-prepend border border-dark">
                                    <span class="input-group-text"><i class="far fa-calendar-alt"></i></span>
                                </div>
                                <asp:TextBox ID="txtReadOnlyDataArranqueProducao" runat="server" class="form-control form-control-sm border border-dark" ReadOnly="true" />
                            </div>

                        </div>
                    </div>
                </div>
            </fieldset>

            <fieldset>
                <legend>Documentos</legend>

                <div class="row justify-content-center">

                    <div class="col-md-12">



                        <asp:Repeater ID="rptAnexos" runat="Server" OnItemCommand="rptAnexos_ItemCommand">
                            <HeaderTemplate>
                                        <table id="tblAnexos" class="table-sm table table-striped table-bordered text-center rounded" style="border-radius: 10px;">
                                            <caption>Lista de Anexos</caption>
                                            <thead class="thead-dark">
                                                <tr>
                                                    <th>ID</th>
                                                    <th>Tipo Desenho</th>
                                                    <th>Nome Ficheiro</th>
                                                    <th>Inserido Por</th>
                                                    <th></th>
                                                </tr>
                                            </thead>
                            </HeaderTemplate>
                            <ItemTemplate>

                                <tr style="font-size:small">
                                    <td>
                                        <asp:Label ID="lblIdRegisto" runat="server" Text=' <%# Eval("ID_Registo") %>' />
                                    </td>
                                    <td>
                                        <asp:Label ID="lblTipoDesenho" runat="server" Text=' <%# Eval("Tipo") %>' />

                                    </td>
                                    <td>
                                        <asp:Label ID="lblNomeAnexo" runat="server" Text='<%# Eval("NomeAnexo") %>' />
                                    </td>
                                    <td>
                                        <asp:Label ID="lblPiloto" runat="server" Text='<%# Eval("Piloto") %>' />
                                    </td>
                                    <td class="text-center">
                                        <asp:ImageButton runat="server" ImageUrl="/Images/Icones/download.png" Width="20" CommandName="Download" CommandArgument='<%# Eval("ID") %>' />
                                    </td>
                                </tr>

                            </ItemTemplate>
                            <FooterTemplate>
                                </table>
                            </FooterTemplate>
                        </asp:Repeater>

                    </div>
                </div>

            </fieldset>

            <fieldset>
                <legend>Observações</legend>

                <div class="row justify-content-center row-eq-height">
                    <div class="col-md-12">


                        <div class="form-group col-7 mx-auto text-center">
                            <asp:Label ID="lblObservacoes" Text="Observações" AssociatedControlID="txtObservacoes" runat="server"></asp:Label>
                            <i class="fas fa-asterisk text-danger mb-2" style="font-size: 8px;"></i>
                            <asp:TextBox ID="txtObservacoes" CssClass="form-control form-control-sm border border-dark" runat="server" TextMode="MultiLine" Rows="3"></asp:TextBox>
                            <div class="valid-feedback">Success! You've done it.</div>
                            <i class="glyphicon glyphicon-ok form-control-feedback"></i>
                            <div class="valid-feedback feedback-icon">
                                <i class="fa fa-check"></i>
                            </div>
                            <div class="invalid-feedback feedback-icon">
                                <i class="fa fa-times"></i>
                            </div>

                            <asp:CustomValidator ID="cvObservacoes" runat="server" EnableClientScript="True" ValidationGroup="vgValidarDocumentacao" Display="Dynamic" ValidateEmptyText="True" ClientValidationFunction="CustomValidator" CssClass="server-validator" ControlToValidate="txtObservacoes"></asp:CustomValidator>
                            <asp:RequiredFieldValidator ID="rfvObservacoes" runat="server" CssClass="server-validator" ValidationGroup="vgValidarDocumentacao" SetFocusOnError="True" ControlToValidate="txtObservacoes" Text="Campo necessário." ErrorMessage="<b>Observações:</b> Campo necessário." Display="Dynamic"></asp:RequiredFieldValidator>


                        </div>

                    </div>
                </div>

            </fieldset>
        </div>
    </div>

    <!-- /.card-body -->
    <div class="card-footer custom-card-footer">
        <asp:Button ID="btnValidarFormulario" CssClass="submit-button font-weight-bold" runat="server" Text="Validar Documentação" ValidationGroup="vgValidarDocumentacao"  OnClick="btnValidarFormulario_Click" />
    </div>
    <!-- /.card-footer -->
</div>

最佳答案

您可以在 ItemTemplate 中放置一个 Label 并将 Visibility 设置为 false。

<asp:Repeater ID="rptValidacao" runat="server">
    <ItemTemplate>
        <asp:Label ID="LabelID" runat="server" Text='<%# Eval("id") %>' Visible="false"></asp:Label>
    </ItemTemplate>
</asp:Repeater>

但是如果您在 Button Click 事件中使用 FindCONtrol,Label 仍然存在并具有正确的值

protected void btnValidarFormulario_Click(object sender, EventArgs e)
{
    Label lbl = rptValidacao.Items[i].FindControl("LabelID") as Label;
}

您还应该查看 DataKeys。但是 Repeater 不能使用它们。

关于c# - 在 Repeater 中传递行的 ID 以提交 ASP NET 中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54038546/

相关文章:

c# - WebApi 路由标识与同一 URL 匹配的多个 Controller 类型。怎么解决?

c# - 在 Windows 窗体中四舍五入选项卡标题

添加FriendlyUrls 后,jQuery ajax 调用无法与 ASP.Net Web 表单一起使用

asp.net - VS2010删除未使用的图像/文件

asp.net 4.5 webforms模型绑定(bind): client side validation supported?

c# - 如何在不阻塞的情况下调用 NetworkStream.Read()?

Asp.net vNext Cookie 身份验证

c# - 提交 ASP.NET 后重定向

c# - ASP.NET 无需询问就知道我的密码?

c# - 如何在 Windows 上安装 NUnit 3 控制台并运行测试?