3

我有一个嵌套的中继器因为我的代码中没有控件是可见的,因此我发现我必须使用 FindControl 才能使控件可见。我想在单击按钮后从标签中传递一个值,但我很难让它正确

带有值的标签

<asp:Label ID="lblordernr" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.sid").ToString()%>'></asp:Label>

我使用的按钮:

<asp:Button ID="btnPaid" runat="server" Text="Paid" OnClick="rlrtAdres_ItemDataBound"
                        Style="height: 26px" CssClass="knop" CommandName="btnPaid" />

RepeaterItemDataBound

protected void rlrtAdres_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Label lblordernr = e.Item.FindControl("lblordernr") as Label;
    Repeater myRepeater = (Repeater)sender;
    Button btn = (Button)sender;
    switch (btn.CommandName)
    {
        case "btnPaid":
            MutateSold("paid", lblordernr.Text);
            break;
    }
}

我首先有一个普通的 buttonOclick 控件,但我只是不知道如何将它与标签值结合起来,并使用嵌套中继器和此中继器中的每个不可见控件调用最终方法“MutateSold”用于数据库目的

protected void btnButton_Click(object sender, EventArgs e)
{
    Control myControllblordernr = FindControl("lblordernr");
    Button btn = (Button)sender;
    switch (btn.CommandName)
    {
        case "btnPaid":
            MutateSold("paid", myControllblordernr.ToString());
            break;
     }
}
4

1 回答 1

1

您收到您在标题中发布的错误,因为该Click事件btnPaid需要一个具有如下签名的事件处理程序:

protected void btnButton_Click(object sender, EventArgs e)

您将其指向具有以下签名的方法:

protected void rlrtAdres_ItemDataBound(object sender, RepeaterItemEventArgs e)

如果中继器btnPaidlblordernr相同ItemTemplate,您可以调用FindControl按钮以获取对 的引用lblordernr。例如,如果btnPaid这样声明:

<asp:Button ID="btnPaid" runat="server" Text="Paid" OnClick="btnPaid_Click"
    Style="height: 26px" CssClass="knop"  />

以下代码将为您提供对lblOrderNr.

protected void btnPaid_Click(object sender, EventArgs e)
{
    var btnPaid = (Button)sender;
    var lblOrderNr = (Label)btnPaid.FindControl("lblordernr");
    var labelText = lblOrderNr.Text;

    //Do whatever else needs to be done
}

或者,您可以将值添加lblOrderNr到按钮上的CommandArgument属性中,然后也可以从那里直接获取。

<asp:Button ID="btnPaid" runat="server" Text="Paid" OnClick="btnPaid_Click"
    CommandArgument='<%# DataBinder.Eval(Container, "DataItem.sid").ToString()%>'
    Style="height: 26px" CssClass="knop" />


protected void btnPaid_Click(object sender, EventArgs e)
{
    var btnPaid = (Button)sender;
    var labelText = btnPaid.CommandArgument;

    //Do whatever else needs to be done
}
于 2011-07-19T21:46:28.693 回答