RegisterClientScriptBlock混淆

时间:2010-09-10 12:30:31

标签: asp.net jquery client-side registerclientscriptblock

我的主网页包含JS代码,可以使用自定义jQuery对话框覆盖标准警报。

<script type="text/javascript" language="javascript">
        window.alert=function(alertMessage)
        {
          $.msgbox(alertMessage, {type: "info"});  
         }             
</script>

在default.aspx网页onLoad方法中,我正在尝试注册并显示警告脚本

 Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "InvalidPassword",
                "alert(\"Your login attempt was not successful. Please try again.\");",
                true);

不幸的是它不起作用。如果我删除覆盖警报框的JS代码一切正常,则会出现警告框。覆盖JS是正确的,如果我在客户端执行警报js它工作正常,但如果我尝试从服务器端执行代码它不起作用。

有谁能解释问题出在哪里?

2 个答案:

答案 0 :(得分:3)

当我尝试从aspx页面的page_load事件运行它时,我遇到了同样的问题,但是当我从body onload事件运行它时,它可以工作。我认为这是因为page_load事件发生在window.alert override有机会运行之前。

在body标签中尝试:

<body onload="alert('Your login attempt was not successful. Please try again.');">  

和jQuery:

$(function () {

        window.alert = function (message) {
            $('#dialog').text(message).dialog();
        }

 });

顺便说一句,我使用了jQuery UI对话框插件。

答案 1 :(得分:0)

好的,我发现了问题所在。如果使用RegisterClientScriptBlock注册的代码引用另一个JS代码,那么我们需要完整地加载网页。似乎在RegisterClientScriptBlock中注册的JS在浏览器中加载时立即执行,无论网页是否已加载。所以我们需要在网页加载完全后执行代码。我们可以使用下面的jQuery事件找到它

  $(document).ready(function() {



  });

完整代码看起来像

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "InvalidPassword",
                    "$(document).ready(function() {alert(\"Your login attempt was not successful. Please try again.\");})",
                    true);