繁体   English   中英

如何在中继器控制中使用按钮?

[英]How to use button in repeater control?

我在C#中使用asp.net 3.5,我想在转发器控件中调用按钮单击事件。

<asp:Repeater ID="rptFriendsList"
    runat="server" 
    onitemcommand="rptFriendsList_ItemCommand">
    <ItemTemplate> 
        <asp:ImageButton ID="btnSave"
                         runat="server" 
                         ImageUrl="~/Contents/Images/save_button.png"
                         CommandName="Schedule"
                         UseSubmitBehavior="False"  />
    </ItemTemplate>
</asp:Repeater>

但是当我单击按钮时,出现错误

“无效的回发或回调参数。使用配置中或页面中的<%@页面EnableEventValidation =“ true”%>启用事件验证。出于安全目的,此功能验证回发或回调事件的参数源自服务器控件,最初呈现它们。如果数据有效且预期,请使用ClientScriptManager.RegisterForEventValidation方法以注册回发或回调数据以进行验证。”

我的目的是在放置在转发器内部的按钮单击中执行一些代码。请帮助我解决此问题。谢谢。

UseSubmitBehavior =“ False”您使用过的此属性与图像按钮一起不存在,如果您覆盖了imagebutton类并添加了此属性。

当您在OnLoad事件而不是OnInit中分配了数据源并绑定了转发器的数据时,也会发生这种情况

您不能使用按钮,因为按钮会在单击时创建回发,并且还会调用中继器的itemcommand!

但是,如果要使用asp:button而不是asp:linkbutton,则必须将button的UseSubmitBehavior属性设置为false。 它的意思是,按钮不进行回发。

<asp:Button ID="btnAccept" runat="server" Text="Accept All" CssClass="vb-default vb-green vb-txt-light" CommandName="Accept" CommandArgument='<%# Eval("UserID") %>' UseSubmitBehavior="false" />
<asp:Repeater ID="Repeater1" runat="server"      OnItemCommand="Repeater1_OnItemCommand"  DataSourceID="SqlDataSource1">


            <ItemTemplate>
                key1:
                <asp:Label ID="key1Label" runat="server" Text='<%# Eval("key1") %>'></asp:Label><br />
                key2:
                <asp:Label ID="key2Label" runat="server" Text='<%# Eval("key2") %>'></asp:Label><br />
                key3:
                <asp:Label ID="key3Label" runat="server" Text='<%# Eval("key3") %>'></asp:Label><br />
                <asp:TextBox ID="col1" runat="server" Text='<%# Eval("col1") %>'></asp:TextBox>
                <asp:TextBox ID="col2" runat="server" Text='<%# Eval("col2") %>'></asp:TextBox>


                <br />


                <asp:linkbutton ID="Linkbutton1" commandname="Update" runat="server" text="Update"  CommandArgument='<%# Eval("key1") +"|"+Eval("key2")+"|"+ Eval("key3") %>' />
               <asp:linkbutton ID="Linkbutton2" commandname="Cancel" runat="server" text="Cancel" />


            </ItemTemplate>



 protected void Repeater1_OnItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "Update")
        {

            string col1 = ((TextBox)e.Item.FindControl("col1")).Text;
            string col2 = ((TextBox)e.Item.FindControl("col2")).Text;


            string allKeys = Convert.ToString(e.CommandArgument);

            string[] arrKeys = new string[2];
            char[] splitter = { '|' };
            arrKeys = allKeys.Split(splitter);



            SqlDataSource1.UpdateParameters["col1"].DefaultValue = col1;
            SqlDataSource1.UpdateParameters["col2"].DefaultValue = col2;

            SqlDataSource1.UpdateParameters["key1"].DefaultValue = arrKeys[0];
            SqlDataSource1.UpdateParameters["key2"].DefaultValue = arrKeys[1];
            SqlDataSource1.UpdateParameters["key3"].DefaultValue = arrKeys[2];


            SqlDataSource1.Update();          

            Repeater1.DataBind();

        }
    }

我已使用此波纹管代码并运行正常,请在.aspx页中使用此波纹管代码

<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
    <HeaderTemplate>
        <table>
            <tr>
                <th>
                    Edit
                </th>
            </tr>
        </table>
    </HeaderTemplate>
    <ItemTemplate>
        <table>
            <tr>
                <td align="center">
                    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Edit">Edit</asp:LinkButton>
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:Repeater>

在.cs中使用此功能使事件Repeater1_ItemCommand

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{

    switch (e.CommandName)
    {
        case "Edit":
            // Do some stuff when the Edit button is clicked.

            break;

        // Other commands here.

        default:
            break;
    }

}

设置页面EnableEventValidation =“ false”。

如果要在服务器端添加项目,请尝试为每个ImageButton分配唯一的ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM