2

我正在使用 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 等)。

4

1 回答 1

1

我找到了答案,尽管它与 GreyBox 并没有特别的关系。当它应该是一个链接并添加了不正确的属性时,我错误地制作了一个脚本。当它应该是 text/css 时,类型是 text/javascript。这似乎有所作为。为了提供更多背景信息,我有以下内容:

 HtmlGenericControl Link5 = new HtmlGenericControl();
 Link5.TagName = "script";
 Link5.Attributes.Add("href", ResolveClientUrl("~/MyApp/Greybox/gb_styles.css"));
 Link5.Attributes.Add("rel", "stylesheet");
 Link5.Attributes.Add("type", "text/javascript");
 Page.Header.Controls.Add(Link5);

'TagName' 应该是 'link' 而 Link5.Attributes.Add("type", "text/javascript") 应该是 'text/css'。

于 2014-11-13T12:51:57.700 回答