我在 a 期间加载我的 ascx 控件postback(下拉更改事件):
父级 C#:
private void ddlChange()
{
MyControl myCtr = (CallScript)Page.LoadControl("~/Controls/MyControl.ascx");
myCtr.property = "something"; // set public properties
myCtr.initControl(); // do some database calls
myCtrPlaceHolder.Controls.Add(myCtr);
}
父级 HTML:
<asp:UpdatePanel>
<asp:PlaceHolder ID="myCtrPlaceHolder" runat="server"/>
<asp:UpdatePanel/>
自定义控件 C#:
public void initControl()
{
// do some db calls first and pass it to client side via ASP controls
// then dynamically produce html elements within the custom control
ScriptManager.RegisterStartupScript(Page, typeof(Page), "name", "alert(1); documentReady();", true);}
// PROBLEM: page says documentReady() is not defined.
}
自定义控件 HTML:
<script type="text/javascript"> // PROBLEM: this doesn't get registered to DOM
function documentReady() {
// load more controls dynamically
}
</script>
<div>
<!-- some html buttons and stuff
</div>
父 html 将自定义控件的 HTML 按钮和更新面板中的其他内容加载到占位符中。此外,在每次下拉列表更改时,都会在自定义控件的 C# 中进行正确的数据库调用。我还可以看到由自定义控件的 C# 生成的测试警报。然而,自定义控件的脚本没有以某种方式注册到 DOM,所以我无法调用documentReady();
回发后。
帮助我吧。
Please.
Thanks.
PS:到目前为止,我已经尝试以非动态方式创建自定义控件。我尝试创建一个 js 文件并将自定义控件的所有 js 代码放在那里并在父 HTML 中调用它。这听起来很有希望,但我正在尝试将东西包装在单个自定义 ASP 控件中。我已经用过RegisterStartupScript
在父母的 C# 中,如果运气不好的话,还有一些其他的东西。