I asked 这个问题 https://stackoverflow.com/questions/4852474/asp-net-gridview-update-button-fires-edit-event-handler关于 ASP.Net 中 GridView 控件的奇怪行为(我使用的是 C#)。
对于 GridView 中的每一行,都有一个“编辑”和“删除”链接。例如编辑有这个javascript:__doPostBack('gvwServers','Edit$0')
- 所以显然服务器会发现有人点击了编辑行0
of gvwServers
.
很公平。如果我单击“编辑”链接,我会收到回发,并且 GridView 会重新绘制,“编辑”按钮将替换为“更新”和“取消”按钮。标准行为。现在 - “取消”按钮有此链接javascript:__doPostBack('gvwServers','Cancel$0')
- 正是我所期望的取消行0
of gvwServers
。但是更新按钮有javascript:__doPostBack('gvwServers$ctl02$ctl00','')
。这似乎没有任何意义。这似乎是我处理更新的例程未被触发的原因。
为什么 ASP 不输出正确的回发参数?
我的代码可以在上面的链接中找到。
<asp:GridView ID="gvwServers" runat="server" class="gvwServers"
AutoGenerateColumns="false" OnRowEditing="gvwServers_Edit"
onrowcancelingedit="gvwServers_Cancelling" onrowdeleting="gvwServers_Deleting"
onrowupdated="gvwServers_Updated" onrowupdating="gvwServers_Updating"
AutoGenerateEditButton=true AutoGenerateDeleteButton=true>
<columns>
<asp:CommandField ShowEditButton="true" />
<asp:CommandField ShowDeleteButton="true" />
<asp:BoundField DataField="intServerID" visible="false" />
<asp:TemplateField HeaderText = "Server Name">
<ItemTemplate>
<asp:Label ID="lblServerName" runat="server" Text='<%# Bind("txtName") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtServerName_Edit" runat="server" Text='<%# Bind("txtName") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText = "Key">
<ItemTemplate>
<asp:Label ID="lblAppKey" runat="server" Text='<%# Bind("txtApplicationKey") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtAppKey_Edit" runat="server" Text='<%# Bind("txtApplicationKey") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText = "Connection String">
<ItemTemplate>
<asp:Label ID="lblConnString" runat="server" Text='************'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" ID="txtConnString_Edit" Width="300px" Height="100px" Text='<%# Bind("txtConnectionString")%>' TextMode="MultiLine" ></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
</columns>
</asp:GridView>
不确定你在期待什么/没有发生什么。我拿了你的 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<Item> items = new List<Item>();
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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)