ASP.. NET按钮在Repeater和LoginView中的OnClick

本文关键字:LoginView 中的 OnClick Repeater NET 按钮 ASP | 更新日期: 2023-09-27 18:15:51

我正在开发一个ASP。. NET网站与c#后端。我有一个问题,如何设置一个onclick事件的按钮都嵌套在一个loginview和一个中继器。代码可以很好地显示所有其他数据(匿名视图只显示一个错误消息),但是现在按钮只是重定向到同一个页面,并删除重复器和所有内容,而它们应该运行一个特定的删除函数。重复器,就像它现在一样,使用一个交替项模板。如果我从嵌套控件中删除按钮,它们就可以工作。我已经在按钮、链接按钮和图像按钮上尝试过了。如果可能的话,我宁愿使用后者。如果这些按钮像这样嵌套,是否有可能分配一个Onclick给它们?如果没有,我应该使用什么方法?

<asp:LoginView ID="LoginLinksView" runat="server" EnableViewState="false">
<AnonymousTemplate>
    <asp:Label ID="errorlabel" runat="server"></asp:Label>
</AnonymousTemplate>
<LoggedInTemplate>
    <asp:Repeater id="Repeater" runat="server" >
    <HeaderTemplate>
     <table cellspacing="0" cellpadding="0">
     <thead></thead>
    </HeaderTemplate>
    <ItemTemplate>
    <tr class="Repeaterrow">
    <!--Additional code here-->
    <asp:ImageButton ID="delbutton" runat="server" ImageUrl=
         "~/Images/delete.png" Onclick="DeleteOnClick"/>        
    </tr> 
    </ItemTemplate>   
    <AlternatingItemTemplate>
    <tr class="Repeaterrow">
    <!--Additional code here-->
    <asp:ImageButton ID="delbutton" runat="server" ImageUrl=
         "~/Images/delete.png" Onclick="DeleteOnClick"/>             
    </tr>
    </AlternatingItemTemplate>
    <FooterTemplate>  
    </table>
    </FooterTemplate>
    </asp:Repeater>
</LoggedInTemplate>
</asp:LoginView>

ASP.. NET按钮在Repeater和LoginView中的OnClick

您的方法存在以下问题

1-按钮发送回发。但是您需要放置一些CommandArgument来标识"键"或您要处理的行。

2-重新绑定你的中继器与源。下面是示例代码:

protected void Page_Load(object sender, EventArgs e)
{
    BindRepeater();
}
private void BindRepeater()
{
    List<int> items = new List<int>();
    for (int i = 0; i < 10; i++)
    {
        items.Add(i);
    }
    Repeater.DataSource = items;
    Repeater.DataBind();
}
protected void DeleteOnClick(object sender, EventArgs e)
{
    ImageButton delbutton = (sender as ImageButton);
    //1- call your method with passing in delbutton.CommandArgument - it will give you key/ whatever you like
    //2- Rebind the Repeater here and that will bind controls again...
    BindRepeater();
}
protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    ImageButton delbutton = (sender as RepeaterItem).FindControl("delbutton") as ImageButton;
    if (delbutton != null)
    {
        delbutton.CommandArgument = (sender as RepeaterItem).ItemIndex.ToString();
    }
}

和ASPX中继器定义将更改为

谢谢,Riz