【发布时间】:2013-07-02 11:27:30
【问题描述】:
我有一个在 GridView 中显示订单的页面,每一行都有一个详细信息和删除按钮。大多数情况下一切正常,但如果新订单在页面刷新和按钮点击之间到达,则会处理错误的订单。
我将唯一标识符保存到 CommandArgument,但似乎有问题的标识符没有传递回服务器,而是某种计数器(例如 5 阶),因为在新订单到达后,正确的标识符将是6、一切都出错了……这是怎么回事?
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" PageSize="20"
EnableViewState="False" EnableSortingAndPagingCallbacks="True"
DataSourceID="ldsOrders" AllowPaging="True"
ondatabound="gvOrders_DataBound" CssClass="Gridview" >
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False"
ReadOnly="True" SortExpression="ID" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnDelete" runat="server" CommandArgument='<%#Eval("ID") %>' CommandName="Delete"
Text="Delete" OnClick="btnDelete_Click" CausesValidation="False" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnOrder" runat="server" CommandArgument='<%#Eval("ID") %>' CommandName="Order"
Text="Order" OnCommand="btnOrder_Click" CausesValidation="False" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
代码隐藏:
protected void btnDelete_Click(object sender, CommandEventArgs e)
{
string orderID = (string)e.CommandArgument;
da.DeleteOrder(Convert.ToInt32(orderID));
Response.Redirect(Request.RawUrl, false);
}
【问题讨论】:
-
您能否详细说明“一切都出错了”。请问?
-
我的意思是它处理了错误的行(删除错误的行,打开错误的顺序,...)。例如,如果我想删除第三行的订单 #123。如果页面加载后新订单到达,则删除错误的行(例如#124)。 (如果我在删除之前刷新页面,第三行会是什么)