C# 似乎没有为uu doPostBack发出正确的GridView标记

C# 似乎没有为uu doPostBack发出正确的GridView标记,c#,asp.net,gridview,postback,markup,C#,Asp.net,Gridview,Postback,Markup,我询问了ASP.Net中GridView控件的一个奇怪行为(我使用的是C#) 对于我的GridView中的每一行,都有一个“编辑”和“删除”链接。例如,edit有这样一个javascript:uuu doPostBack('gvwserver','edit$0')-因此,服务器显然会发现有人点击编辑了gvwserver的行0 很公平。如果我点击编辑链接,我会得到一个回发,网格视图会被重新绘制,编辑按钮被替换为“更新”和“取消”按钮。标准行为。现在,“取消”按钮有一个链接javascript:uu

我询问了ASP.Net中GridView控件的一个奇怪行为(我使用的是C#)

对于我的GridView中的每一行,都有一个“编辑”和“删除”链接。例如,edit有这样一个
javascript:uuu doPostBack('gvwserver','edit$0')
-因此,服务器显然会发现有人点击编辑了
gvwserver
的行
0

很公平。如果我点击编辑链接,我会得到一个回发,网格视图会被重新绘制,编辑按钮被替换为“更新”和“取消”按钮。标准行为。现在,“取消”按钮有一个链接
javascript:uu doPostBack('gvwServers','Cancel$0')
-这正是我所期望的
gvwServers
取消行
0
。但是更新按钮有
javascript:uu 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代码,并在另一个链接中使用了您的代码。我添加了一个响应。在每个处理程序中写入,它似乎按照预期运行

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();
}
公共类项目
{
public int intServerID{get;set;}
公共字符串txtName{get;set;}
公共字符串txtApplicationKey{get;set;}
公共字符串txtConnectionString{get;set;}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
项目=新项目();
item.intServerID=1;
item.txtName=“苹果”;
item.txtApplicationKey=“橙色”;
item.txtConnectionString=“测试”;
列表项=新列表();
项目。添加(项目);
gvwServers.DataSource=项;
gvwServers.DataBind();
}
受保护的void gvwServers_Edit(对象发送方,GridViewEditEventArgs e)
{
回复。填写(“编辑”);
gvwServers.EditIndex=e.NewEditIndex;
gvwServers.DataBind();
}
受保护的void gvwServers_已更新(对象发送方,GridViewUpdatedEventArgs e)
{
答复。书面(“更新”);
gvwServers.DataBind();
}
受保护的void gvwServers_更新(对象发送方,GridViewUpdateEventArgs e)
{
回复。填写(“更新”);
gvwServers.DataBind();
}
受保护的void gvwServers_正在删除(对象发送方,GridViewDeleteEventArgs e)
{
答复。填写(“删除”);
gvwServers.DataBind();
}
受保护的void gvwServers\u正在取消(对象发送方,GridViewCancelEditEventArgs e)
{
回复。填写(“取消”);
e、 取消=真;
gvwServers.EditIndex=-1;
gvwServers.DataBind();
}

能否显示所有gridview代码?(上面的链接仅显示编辑/删除)可能被简单忽略。@Wil更新为MarkupgVwservers_更新例程是否触发?当鼠标悬停在更新按钮上时,您能看到uuu doPostBack参数是什么吗?我将此答案标记为正确的原因(我想)是填充数据网格的方法是正确的,即在
Load
中-我在
Init
中执行此操作。这一定是破坏了处理程序关联。你能解释一下吗?Init只在第一次加载时运行,不在任何后续加载时运行postbacks@Wil是的,我知道这一点,这就是我在init上填充数据网格的原因。它没有解释为什么它会破坏更新事件。我想可能是因为_doPostBack参数中引用的控件不再存在,因此无法定位或其他原因,它与asp.net的生命周期有关。如果在init中再次加载网格,则无法访问viewstate ie,告知页面您处于编辑模式。