ASP.NET PostBack没有达到正确的方法

时间:2013-04-09 15:12:38

标签: c# asp.net postback

考虑以下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());
    }

1 个答案:

答案 0 :(得分: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不起作用。