如何在Script#中使用onBeforeUnload事件?

| 我正在ASP.NET中使用Script#库。我想听并响应onBeforeUnload浏览器事件。 我目前正在拦截这样的事件:
Window.AttachEvent( \"onbeforeunload\", OnNavigateAway );
...
private void OnNavigateAway()
{
    Script.Alert(\"You\'re leaving.\");
}
但是Window.AttachEvent的第二个参数是DOMEventHandler,其返回类型为void。要使用onBeforeUnload事件,我需要能够返回一个字符串值,该字符串值将被浏览器用作确认消息。 有什么方法可以做到这一点,而无需发出脚本文字或手工编码的javascript?我真的很想尽可能地留在已编译的C#-> javascript中。 万一有问题,我正在使用Script#库的0.5.5版,它不是最新版本,但目前仅限于此。 更新:DuckMaestro完美地回答了我的问题,但是它仍然对我不起作用。这是我的问题的正确答案,因为编译后的Java脚本正是我所期望和想要的。但这没有引起浏览器发出警告提示的预期效果。 不过,我确实有一种解决方法,以防其他人偶然发现此答案并想知道我最初是如何破解它的。代替这个:
public delegate string BeforeUnloadDelegate();
...
Window.AttachEvent( \"onbeforeunload\", (DOMEventHandler) (Object) 
    new BeforeUnloadDelegate(OnNavigateAway) );
我这样做:
Script.Literal( \"window.onbeforeunload = this._onNavigateAway\" );
出于多种原因,这是不好的形式。这仅适用于Script#生成的.debug.js类; Script#会更改发行版本中的名称,因此Script.Literal语句发出的脚本将不匹配。此外,它一开始就否定了使用Script#的许多好处。 (例如,使用Visual Studio的重构工具将OnNavigateAway重命名为其他名称,将在字符串中留下孤立的引用。)此外,C#代码将方法声明为OnNavigateAway,而Script.Literal必须引用此方法。 _onNavigateAway。 不过,如果像我一样,您正在最后期限并正在寻找黑客,这是一个开始的地方。如果我在更正确的版本上取得了更多进步,我将使用详细信息更新此问题。 再次感谢DuckMaestro回答了我提出的问题。     
已邀请:
我会声明一个新的委托类型
public delegate string BeforeUnloadCallback();
然后将您的attachEvent代码更改为
Window.AttachEvent( \"onbeforeunload\", (DOMEventHandler)(Object) new BeforeUnloadCallback(OnNavigateAway) );
我不是很肯定能在0.5.5上运行,但这是我不时在0.6.x中使用的技巧。     

要回复问题请先登录注册