页面中如果没用Ajax,cs中运行某段js代码的方式可以是:
Page.ClientScript.RegisterStartupScript(
Page.GetType(),
“”,
“<script>window.open(‘default.aspx’);CloseDialog();</script>”);
如果页面中使用了Ajax,则上述代码即使执行也没有效果。针对这种情况,我们通常采用:
ScriptManager.RegisterStartupScript(
this.Button1,
this.GetType(),
“closeDialog”,
“window.open(‘default.aspx’);CloseDialog();”
true);
第一个参数是注册该客户端脚本的控件Id,试了一下只要是本页面的都行
第二个参数是注册脚本块的控件类型,本控件或this.GetType()都行,typeof(string)也没问题
第三个参数是脚本函数的名字
第四个参数是脚本内容
第五个参数是是否添加脚本标签,如果第四个参数值包含<script></script>,此处为false,否则此处为true.
按钮没在UpdatePanel控件中:
此时直接在后台注册脚本块即可。
<script type="text/javascript">
function CloseDialog() {
var dialog = art.dialog.data("closeDialog");
dialog.close();
}
</script>
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="后台调用js" />
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
</form>
protected void Button1_Click(object sender, EventArgs e)
{
//CloseDialog();是jquery方法
ScriptManager.RegisterStartupScript(this.Button1, this.GetType(), "", "alert('审核测试" + this.physicalSiteNameLabel.Text.Trim() + "成功');CloseDialog();", true);
}
按钮在UpdatePanel控件中:
当按钮在UpdatePanel控件中时,如果想在后台注册代码块必须加上<Triggers>部分代码,否则无效。
<script type="text/javascript">
function CloseDialog() {
var dialog = art.dialog.data("closeDialog");
dialog.close();
}
</script>
<asp:ScriptManager runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="后台调用js" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
</asp:UpdatePanel>
protected void Button1_Click(object sender, EventArgs e)
{
//CloseDialog();是jquery方法
ScriptManager.RegisterStartupScript(this.Button1, this.GetType(), "", "alert('审核测试" + this.physicalSiteNameLabel.Text.Trim() + "成功');CloseDialog();", true);
}
如果在onClick事件中使用该方法注册了两个名称相同的脚本,那第二个脚本函数不会执行。因为脚本管理器使用此字符串来分析是否是一个已经加载过的脚本,如果加载过,将不会再次渲染,所以第二个不会再执行。