javascript - 动态生成的数据网格控件删除链接中不会调用经典 ASP.NET 删除事件

标签 javascript asp.net .net datagridview dopostback

我有一个经典的 ASP.NET 应用程序。我有一个数据网格用户控件,其标记数据源为:

<asp:SqlDataSource ID="DataSource" runat="server" DeleteCommand="UPDATE tblLSystem SET LS_Deleted='1' WHERE LS_ID=@LS_ID"
    SelectCommand="SELECT * FROM vwLSystem WHERE LS_Deleted='0' order by LS_CreatedOn" OnSelected="DataSource_Selected" OnDeleted="DataSource_Selected" OnDeleting = "DataSource_Deleting">
    <DeleteParameters>
        <asp:Parameter Name="LS_ID" Type="Object" />
    </DeleteParameters>
</asp:SqlDataSource>

删除链接按钮模板声明为:

<asp:TemplateField HeaderText="" SortExpression="" Visible="True"> 
    <ItemTemplate>
       <asp:LinkButton ID="btnDelete" CommandName="Delete" runat="server" Text="Delete" />
    </ItemTemplate>            
</asp:TemplateField>

类名称后面的代码是“class StudLSystemGrid”。而该类中的DataSource_Deleting事件函数为:

protected void DataSource_Deleting(object sender, SqlDataSourceCommandEventArgs e)
{
}

此用户控件在另一个 asp.net 页面中使用。它在页面中注册为:

<%@ Register Src="Controls/LSystemGrid.ascx" TagName="LSystemGrid" TagPrefix="uc4" %>

在同一页面中,它用于静态创建一个用户控件,如下所示:

  <uc4:LSystemGrid ID="LSystemGrid1" runat="server" ShowAuditFields="false" />

我还需要根据情况在代码隐藏中动态创建多个用户控件。所以我在标记页面中有一个占位符:

  <asp:PlaceHolder id="PlaceHolder1" runat="server"/>

在代码后面使用相同的代码来生成用户控件:

    ucLControl =
      LoadControl("Controls/LSystemGrid.ascx")
      as StudLSystemGrid;
    ucLControl.ID = "LSystemGridPD" + i.ToString();
    ucLControl.ShowAuditFields = false;
    ucLControl.SqlDataSource.ConnectionString = ConnectionManager.ConnectionString;
    ucLControl.DataBind();
    PlaceHolder1.Controls.Add(ucLControl);

静态生成的用户控件工作正常。点击删除链接可以调用前面提到的“DataSource_Deleting”函数。但是,动态生成的用户控件不起作用。未命中“DataSource_Deleting”函数,无法删除该项目。

静态标记用户控件中删除链接的 html 源是:

       <a onclick="{alert('There'); return false;} ;" 
id="ctl00_PageBody_LSystemGrid1_BaseGrid_ctl02_btnDelete" 
href="javascript:__doPostBack('ctl00$PageBody$LSystemGrid1$BaseGrid$ctl02$btnDelete','')">Delete</a>

对于从代码隐藏动态生成的用户控件是:

       <a onclick="{alert('Here'); return false;} ;" 
id="LSystemGridPD0_BaseGrid_ctl13_btnDelete" 
href="javascript:__doPostBack('LSystemGridPD0$BaseGrid$ctl13$btnDelete','')">Delete</a>

有人知道这里出了什么问题吗?在代码隐藏中以这种方式使用删除链接按钮时,如何确定数据网格处于删除模式?

谢谢

更新:用户控件是动态生成的 -

protected void Page_Load(object sender, EventArgs e)
{
    PreRender += LSystem_PreRender;    
}

void LSystem_PreRender(object sender, EventArgs e)
{
    ucLControl =
      LoadControl("Controls/LSystemGrid.ascx")
      as StudLSystemGrid;
    ucLControl.ID = "LSystemGridPD0";
    ucLControl.ShowAuditFields = false;
    ucLControl.SqlDataSource.ConnectionString = ConnectionManager.ConnectionString;
    ucLControl.DataBind();
    PlaceHolder1.Controls.Add(ucLControl);
}

更新2:

更新 2:用户控件是动态生成的 -

protected void Page_Load(object sender, EventArgs e)
{
    ucLControl =
      LoadControl("Controls/LSystemGrid.ascx")
      as StudLSystemGrid;
    ucLControl.ID = "LSystemGridPD0";
    ucLControl.ShowAuditFields = false;
    ucLControl.SqlDataSource.ConnectionString = ConnectionManager.ConnectionString;
    ucLControl.EnableViewState = true;
    ucLControl.DataBind();
    PlaceHolder1.Controls.Add(ucLControl);
}

最佳答案

发现问题了。数据已绑定(bind)

   ucLControl = LoadControl("Controls/LSystemGrid.ascx")       as StudLSystemGrid;

调用 ucLControl.DataBind();再次消除有界属性。

删除“ucLControl.DataBind();”行后,即可触发删除事件。

关于javascript - 动态生成的数据网格控件删除链接中不会调用经典 ASP.NET 删除事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20779650/

相关文章:

c# - 通知用户有关帐户锁定的信息,即在 ASP .NET MVC2 下

asp.net - 带有母版页的 ASP.NET 菜单中的奇怪视觉工件

c# - 如何在 Entity Framework Core 中调试和修复 'Nullable object must have a value'?

c# - 使用 C# 创建连续文件?

.net - 左排除加入在 vb.net 中使用 LINQ

javascript - 创建phonegap项目的 list -有人可以添加更多元素

javascript - 动态更改 Kendo ui Grid 列标题文本和字段

javascript - 如何获取页面上特定数据属性的所有值并使用收集到的值

javascript - 在 Redux 操作创建器中过滤数据?

c# - 可以在使用 asp.net 按钮回发后运行 javascript 函数吗?