脚本管理器注册启动脚本不添加脚本到页面

Script Manager Register Startup Script do not add script to page

给我谜语,所以。我有两个按钮:

<div class="btn-group" role="group">
    <asp:Button runat="server" ID="RegisterButton" ClientIDMode="Static" OnClick="RegisterButton_Click" Text="register" />
    <asp:Button runat="server" ID="TestButton" ClientIDMode="Static" OnClick="TestButton_Click" Text="testClick" />
</div>

其中调用了两个不同的函数:

protected void RegisterButton_Click(object sender, EventArgs e)
{
...
Register(user)
}
private void Register (user)
{
...
RegisterResultResultJson(regRes);
}
private void RegisterResultResultJson(RegResult regResult)
{
    string jsonString = Helpers.Serializer.JsonSerializer.ToJSON(regResult);
    string script = ";RegisterResult(" + jsonString + ");";
    ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "RegisterStartupScript", script, true);
}
protected void TestButton_Click(object sender, EventArgs e)
{
    string script = ";console.log('klik');";
    ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "RegisterStartupScript", script, true);
}

当我单击 TestButton 时,一切都按预期进行,我可以在源和控制台日志中看到脚本 "klik"。但是当我点击 RegisterButton 时没有任何反应。当我将断点放入代码中时,复制 script 并将其粘贴到控制台中,JS RegisterResult() 可以正常工作。

But when I click RegisterButton nothing happens

发生的事情是,当您执行这段代码时:

string script = ";RegisterResult(" + jsonString + ");";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "RegisterStartupScript", script, true);

这只是在网页中粘贴一段脚本代码,并没有调用函数

<script type="text/javascript">
  //<![CDATA[
 ;RegisterResult(yourDatacomesHere);//]]>
</script>

因此,如果您想调用函数,而不是将其粘贴到脚本标记中,只需将函数调用为:

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "registerButtonClick", "RegisterResult("+jsonString+")", true);

或者您可以将您的代码绑定到 IIFE

string script = "(function(){RegisterResult(" + jsonString + ");})()";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "registerButtonClick", script, true);

注意:为了将来参考,如果可能,请尝试使用可以从客户端调用的 WebMethods(使用 ajax 或简单的 javascript),它可以 return 你在成功或失败函数中返回客户端的值。