Как использовать кнопку в управлении repeater?

Я использую asp.net 3.5 с C#.Я хочу вызвать событие нажатия кнопки внутри элемента управления repeater.

<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>

но когда я нажимаю на кнопку, она выдает ошибку

" недопустимый обратный или обратный вызов аргумент. Включена проверка событий используя в конфигурация или в a страница. В целях безопасности, это функция проверяет, что аргументы события postback или callback возникают от управления сервером что первоначально представлял их. Если данные допустимо и ожидаемо, используйте ClientScriptManager.RegisterForEventValidation способ регистрации данные postback или callback для утверждение."

моя цель-выполнить некоторый код в кнопке, которая помещается внутри ретранслятора.Пожалуйста, помогите мне решить эту проблему.Спасибо заранее.

7 ответов


UseSubmitBehavior= "False" это свойство, которое вы использовали, отсутствует с кнопкой image, вы переехали класс imagebutton и добавили это свойство.


Это также происходит, когда вы назначили источник данных и данные, связанные с ретранслятором в событии OnLoad, а не OnInit


вы не можете использовать кнопку, потому что кнопка создать обратную передачу по щелчку, а также itemcommand ретранслятора называется!

но если вы хотите использовать asp:button вместо asp: linkbutton, вы должны установить свойство UseSubmitBehavior button в false. его средства, кнопка не делают postback.

<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