Как использовать кнопку в управлении 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;
}
}
Если вы добавляете элементы на стороне сервера, попробуйте назначить уникальный идентификатор каждому ImageButton