1

考虑以下 ASP.NET 代码:

<asp:UpdatePanel runat="server" ChildrenAsTriggers="true">
            <ContentTemplate>
                <asp:MultiView runat="server" ID="MultiView" ActiveViewIndex="0">
                    <asp:View runat="server">
                    </asp:View>
                    <asp:View runat="server">
                        <p><img alt="Loading..." src="/global/images/ajax-mini-loader.gif" style="vertical-align: middle;" />&nbsp;Loading...</p>
                    </asp:View>
                    <asp:View runat="server">
                        <asp:GridView runat="server" ID="WarrantyView" OnDataBound="WarrantyView_DataBound" AutoGenerateColumns="false" ItemType="WarrantySystem.Data.ServiceCompany">
                            <Columns>
                                <asp:BoundField HeaderText="Name" DataField="Name" />
                                <asp:BoundField HeaderText="Telephone" DataField="Telephone" />
                                <asp:BoundField HeaderText="Email" DataField="Email" />
                                <asp:BoundField HeaderText="Telephone 24/7" DataField="Telephone247" />
                                <asp:BoundField HeaderText="Email 24/7" DataField="Email247" />
                                <asp:TemplateField HeaderText="Actions">
                                    <ItemTemplate>
                                        <asp:Button runat="server" ID="btnEdit" CommandName="Edit" CommandArgument="<%# Item.ID %>" Text="Edit" />
                                        <asp:Button runat="server" ID="btnDelete" CommandName="Delete" CommandArgument="<%# Item.ID %>" Text="Delete" OnCommand="btnDelete_Command"/>
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>
                    </asp:View>
                    <asp:View runat="server">
                        <p>Your data could no be loaded at this time.</p>
                    </asp:View>
                </asp:MultiView>
                <asp:Timer runat="server" ID="tmrLoadData" Enabled="true" Interval="1" OnTick="tmrLoadData_Tick" />
            </ContentTemplate>
        </asp:UpdatePanel>

单击 btnDelete 时,Page_Load 会发生一个回发事件,并且不会像它应该的那样命中 btnDelete_Command。我不知道为什么!

编辑:编辑按钮也会出现同样的问题......好吧,在这个例子中,没有 OnClick 或 OnCommand 事件,但我刚刚测试过这个......它做同样的事情。

这个怎么运作:

  • 页面加载并显示一个空视图。
  • 计时器计时并开始加载数据,并显示数据加载视图。
  • 加载数据后,将显示数据视图。
  • 单击编辑时,页面应重定向到编辑页面。
  • 单击删除时,页面应该只删除条目。

编辑:根据用户评论(服务器端代码命令代码):

protected void btnDelete_Command(object sender, CommandEventArgs e)
    {
        bool result = this.mgr.DeleteServiceCompany(Int32.Parse(e.CommandArgument.ToString()));
    }

    protected void btnEdit_Command(object sender, CommandEventArgs e)
    {
        Response.Redirect("ServiceCompany.aspx?id=" + e.CommandArgument.ToString());
    }
4

1 回答 1

1

使用 GridView 的 RowCommand 事件来触发您的EditDelete命令。

将此添加到您的 GridView 标记中。

OnRowCommand="WarrantyView_RowCommand"

还要更改CommandName文字

CommandName="Modify"  // change the name here
CommandName="Remove"  // change the name here

在活动内部

protected void WarrantyView_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Modify")
    {
       // your edit logic
    }
    if (e.CommandName == "Remove")
    {
       // your delete logic 
    }
}

我确实建议您更改CommandName属性的名称。
更改Edit为可能Modify
更改Delete为可能Remove
原因是它们是内置gridview命令

注意:确保您的 ViewState 在所有相关位置也已启用。这不适用于禁用 ViewState。

于 2013-04-09T15:35:08.503 回答