脚本管理器注册启动脚本不添加脚本到页面
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 你在成功或失败函数中返回客户端的值。
给我谜语,所以。我有两个按钮:
<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 你在成功或失败函数中返回客户端的值。