我正在尝试使用gridview命令删除gridview中的条目(以及datacontext),但我想先请用户确认。我有一个单独的链接按钮,使用用户单击删除按钮的行中项目的ID来执行删除代码。
当用户单击delete时,我的代码隐藏将另一个linkbutton的CommandArgument属性设置为基本上与它传递的命令参数相同。但是当用户确认删除时,确认链接的命令参数突然变为空字符串?在第一次回发后是否刷新了属性?
这是我的代码:
ASPX
<asp:LinkButton ID="lbDelete" runat="server" Text="Delete" CommandName="delete" CommandArgument='<%# Eval("TheId") %>' /> //Delete LinkButton
<asp:LinkButton ID="confirmDelete" runat="server" OnClick="confirmDelete_Click" Text="Delete" /> //Confirmation Button
C#
rowCommandFunction(object sender, GridViewCommandEventArgs e)
{
// blah blah blah
...
confirmDelete.CommandArgument = e.CommandArgument.ToString();
...// I've put a breakpoint here, and it is setting the value properly...
}
confirmDelete_Click(object sender, EventArgs e)
{
//...but when this line tries to run, comfirmDelete.CommandArgument is set to an empty string?
int selectedId = int.Parse(confirmDelete.CommandArgument);
...
}
答案 0 :(得分:4)
是的,第二回发导致问题..
我认为您应删除confirmDelete按钮,而是从lbDelete 调用javascript函数,并从那里显示一个确认框。然后在命令事件中执行删除操作。
请参阅下面的代码,
Aspx部分,
<asp:LinkButton ID="lbDelete" runat="server" Text="Delete" CommandName="delete" CommandArgument='<%# Eval("TheId") %>' OnClientClick="return ConfirmDelete()"/>
JavaScript部分,
function ConfirmDelete()
{
if(confirm("Are you sure to delete?"))
{
return true;
}
else
{
return false;
}
}
答案 1 :(得分:3)
您必须在按钮中启用EnableViewState="True"
的视图状态。
默认情况下,按钮没有启用视图状态,因此您可以按照预期在回发后使命令参数消失。
编辑:
为什么不将CommandName
设置为第二个按钮并在RowCommand函数中处理它?</ p>