我正在使用 GreyBox js 库来显示一个弹出窗口。为了提供更一般的上下文,我将 VB.NET 中的解决方案重写为 C#。两者的代码基本相同,只是两者使用的语法不同。但是,以下适用于 VB.NET 解决方案,但不适用于 C# 版本:
VB
script = String.Format("GB_showCenter('My Caption', '../MyPage.aspx?number={0}&state={1}&ID={2}',300,600 );", num, MyLabel.Text, Label_id.Text)
ScriptManager.RegisterClientScriptBlock(Me.Page, Me.Page.GetType(), Guid.NewGuid().ToString(), script, True)
这是可行的,当单击按钮时,它会将用户导航到大小受限的新页面。但是,以下不起作用。
C#
script = String.Format("GB_showCenter('MyCaption', '../MyPage.aspx?number={0}&state={1}&ID={2}',300,600 );", num, MyLabel.Text, Label_id.Text);
ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), Guid.NewGuid().ToString(), script, true);
应该发生的是,当我单击链接按钮时,会评估 MyLabel 中的文本,如果文本是正确的,则适当地设置字符串“脚本”并在脚本管理器中注册。使用 VS2010 调试器运行,这一切都按预期发生。但是,用户不会导航到名为“MyPage.aspx”的新页面。网址保持不变,页面变为空白。
更有趣的是,如果我单击滚动条,当前页面将与同一页面上方显示的新弹出窗口一起短暂显示。所以我目前的理论是它与如何从 c# 调用 javascript 有关。有任何想法吗?
更新
我使用了 vs2010 调试器并决定查看 MyPage.aspx 是否被击中。并非如我所料。但是,然后我认为它可能没有触发它的 Page_Load 事件。所以我添加了:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
Load += Page_Load;
}
我在 MyPage.aspx 的 Page_Load 事件上设置了一个断点,现在它被命中了。所有逻辑都正确运行,但我仍然遇到同样的问题(空白页面等,url 未更改为 MyPage.aspx 等)。