似乎没有为__doPostBack发出正确的GridView标记

我在ASP.Net中使用GridView控件的一个奇怪的行为问我这个问题 (我正在使用C#)。

对于GridView中的每一行,都有一个“编辑”和“删除”链接。 例如编辑有这个javascript:__doPostBack('gvwServers','Edit$0') – 显然服务器会弄清楚有人点击了编辑gvwServers0行。

很公平。 如果我单击“编辑”链接,我会收到一个回发,并重新绘制GridView,并将“编辑”按钮替换为“更新”和“取消”按钮。 标准行为。 现在 – ‘取消’按钮有这个链接javascript:__doPostBack('gvwServers','Cancel$0') – 正是我所期待的取消gvwServers0行。 但是更新按钮有javascript:__doPostBack('gvwServers$ctl02$ctl00','') 。 这似乎没有任何意义。 这似乎是我的例程处理Update没有被触发的原因。

为什么ASP没有输出正确的回发参数?

我的代码可以在上面的链接中找到。

        <asp:Label ID="lblServerName" runat="server" Text=''>   <asp:TextBox ID="txtServerName_Edit" runat="server" Text=''>     <asp:Label ID="lblAppKey" runat="server" Text=''>   <asp:TextBox ID="txtAppKey_Edit" runat="server" Text=''>        <asp:TextBox runat="server" ID="txtConnString_Edit" Width="300px" Height="100px" Text='' TextMode="MultiLine" >     

不确定你期待/没有发生什么。 我拿了你的gridview代码并在另一个链接中使用了你的代码。 我在每个处理程序中添加了一个Response.Write,它似乎按预期运行。

 public class Item { public int intServerID { get; set; } public string txtName { get; set; } public string txtApplicationKey { get; set; } public string txtConnectionString { get; set; } } protected void Page_Load(object sender, EventArgs e) { Item item = new Item(); item.intServerID = 1; item.txtName = "Apple"; item.txtApplicationKey = "Orange"; item.txtConnectionString = "Test"; List items = new List(); items.Add(item); gvwServers.DataSource = items; gvwServers.DataBind(); } protected void gvwServers_Edit(object sender, GridViewEditEventArgs e) { Response.Write("Edit"); gvwServers.EditIndex = e.NewEditIndex; gvwServers.DataBind(); } protected void gvwServers_Updated(object sender, GridViewUpdatedEventArgs e) { Response.Write("Updated"); gvwServers.DataBind(); } protected void gvwServers_Updating(object sender, GridViewUpdateEventArgs e) { Response.Write("Updating"); gvwServers.DataBind(); } protected void gvwServers_Deleting(object sender, GridViewDeleteEventArgs e) { Response.Write("Delete"); gvwServers.DataBind(); } protected void gvwServers_Cancelling(object sender, GridViewCancelEditEventArgs e) { Response.Write("Cancel"); e.Cancel = true; gvwServers.EditIndex = -1; gvwServers.DataBind(); }