我在中继器中的按钮有一个奇怪的问题
加载站点后(Dotnetnuke设置页面),中继器已完全创建,并且除中继器中的按钮外,所有内容均正常运行。我只是在代码的断行处设置了断点,以确保它不做任何事情,所以它们什么也没做。
[另一个按钮(运行CreateButton)执行回发(转发器重新绑定)后,它们将按预期工作。
这是我的代码:
<asp:Repeater ID="rptForm" runat="server" EnableViewState="true" ItemType="ButtonObject" > <%--OnItemCommand="rpt_ItemCommand" OnItemDataBound="Repeater_ItemDataBound"--%> <HeaderTemplate> <table class="ButtonTable"> <tr class="ButtonTableHeader"> <td>Id</td> <td>Name</td> <td>Link</td> <td></td> <td></td> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td> <%# Item.Id %> </td> <td> <%# Item.Name %> </td> <td> <%# Item.Link %> </td> <td> <asp:Button ID="EditBtn" runat="server" Text="Editieren" data-ButtonId="<%# Item.Id %>" CssClass="uk-button uk-button-primary" OnClick="EditButton"/> <%--CommandName="edit" CommandArgument="<%# Item.Id %>" --%> </td> <td> <asp:Button ID="DeleteBtn" runat="server" Text="Button Löschen" data-ButtonId="<%# Item.Id %>" CssClass="uk-button uk-button-primary" OnClick="DeleteButton"/> <%--CommandName="delete" CommandArgument="<%# Item.Id %>"--%> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater>
这是后面的代码:
private static ButtonSettings BtnSettings = new ButtonSettings(); protected void Page_Init(object sender, EventArgs e) { if (!IsPostBack) { BtnSettings = new ButtonSettings(); if (Settings.Contains("ButtonSettings")) { BtnSettings.BuildButtonSettings(Settings["ButtonSettings"].ToString()); } BindRepeater(); } } private void BindRepeater() { this.rptForm.DataSource = BtnSettings.Buttons; this.rptForm.DataBind(); } protected void rpt_ItemCommand(object sender, RepeaterCommandEventArgs e) { //This Method will not be executed first time when site loads if (e.CommandName == "edit") // add this { EditButtonDiv.Visible = true; } } protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item) { Button button = (Button)e.Item.FindControl("DeleteBtn"); if (button != null) { button.Click += DeleteButton; } } } protected void DeleteButton(Object sender, EventArgs e) { //This Method will not be executed first time when site loads Button button = sender as Button; var buttonID = Convert.ToInt32(button.Attributes["data-ButtonId"].ToString()); BtnSettings.RemoveButton(buttonID); BindRepeater(); } protected void EditButton(Object sender, EventArgs e) { //This Method will not be executed first time when site loads /* TODO:: Get ButtonId - Set values */ EditButtonDiv.Visible = true; } protected void CreateButton(Object sender, EventArgs e) { var buttonObj = new ButtonObject(); ... BindRepeater(); ScriptManager.RegisterStartupScript(Page, this.GetType(), "script", "ReRegisterDivEvents()", true); ScriptManager.RegisterStartupScript(Page, this.GetType(), "script", "ClearForm()", true); }
我在哪里犯错?
我在加载站点(Dotnetnuke设置页面)时,中继器中的按钮有一个奇怪的问题,即中继器已完全创建,并且除了中继器中的按钮之外,所有其他东西都可以正常工作。他们...
转发器内的按钮与放置其他软件的按钮不完全相同。您需要使用CommandName和CommandAttributes字段来标识您的按钮和记录。然后,您使用转发器的ItemCommand事件对特定记录的特定按钮做出反应。
好吧,我拍了拍...