[英]ASP.NET Button OnClick within Repeater and LoginView
我正在开发具有C#后端的ASP.NET网站。 我在如何为同时嵌套在loginview和Repeater中的按钮设置onclick事件时遇到问题。 该代码可以很好地显示所有其他数据(匿名视图仅显示错误消息),但是现在按钮仅重定向到同一页面并删除转发器和所有内容,而它们应该运行特定的删除功能。 现在的中继器使用了交替项目模板。 如果我从嵌套控件中删除按钮,它们将起作用。 我已经尝试过使用按钮,链接按钮和图像按钮。 如果可能的话,我宁愿使用后者。 如果这些按钮像这样嵌套,是否可以为这些按钮分配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>
这是您的方法存在的问题
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 Repeater定义将更改为
谢谢,里兹
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.