JavaScript回调函数在通过ScriptManager.RegisterStartupScript调用时无法找到控

本文关键字:调用 RegisterStartupScript 函数 回调 ScriptManager JavaScript | 更新日期: 2023-09-27 18:11:39

我的按钮点击事件是这样的:

protected void btnSave_Click(object sender, EventArgs e)
{
    // Save logic goes here
    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "saveCallback", "SaveGridChanges();", true);
}

正如你所看到的,我试图调用函数SaveGridChanges();

function SaveGridChanges()
{
    var radGrid1 = $find('<%=RadGrid1.ClientID%>');
    radGrid1.get_batchEditingManager().saveChanges(radGrid1.get_masterTableView());
}

问题是,当函数被调用时,我得到JavaScript错误,因为它无法找到网格。这很可能是因为脚本试图在网格输出到页面之前运行。有什么建议吗?

确切的错误信息是:

Uncaught TypeError: Cannot read property 'get_batchEditingManager' of null. Uncaught TypeError: Cannot read property 'disable' of null.

我已经尝试在page_load和pre_render上注册脚本,网格在那些时候仍然不可用。

JavaScript回调函数在通过ScriptManager.RegisterStartupScript调用时无法找到控

我最终做了以下事情,它似乎正在工作。但是,不确定它有多可靠。

ScriptManager.RegisterStartupScript(Page, Page.GetType(), "saveCallBack", "setTimeout(SaveGridChanges, 100);", true);

我假设setTimeout给jQuery时间加载或任何$find依赖。

如果有人有更好的解决方案,请发帖。