导航

Response.Write输出JS后CSS失效问题

Posted on 2008-04-06 19:35  菜鸟都不容易  阅读(205)  评论(0编辑  收藏  举报
 使用 Response.Write 输出 JS 后会造成 CSS 样式失效,其主要原因是输出的 JS 被放到了页面的最前面,破坏了 XHTML 的结构。我们可以使用下面两种方法来输出 JS:void MessageBox(string strKey,string strInfo)
{
    
if !ClientScript.IsClientScriptBlockRegistered(strKey))
    
{
        
string strjs = "alert('" + strInfo + "');";
        ClientScript.RegisterStartupScript(
this.GetType(), strKey, strjs, true);
    }

}

void MessageBox(string strKey,string strInfo)
{
    
if !ClientScript.IsClientScriptBlockRegistered(strKey))
    
{
        
string strjs = "alert('" + strInfo + "');";
        ClientScript.RegisterClientScriptBlock(
this.GetType(), strKey, strjs, true);
    }

}

  .NET1.1 中对应的方法为 Page.RegisterStartupScript 和 Page.RegisterClientScriptBlock。

  这两个方法的作用都是从后台向前台写脚本, 这两个方法唯一的不同之处在于从“何处”发送脚本块。RegisterClientScriptBlock() 在 Web 窗体的开始处(紧接着<form runat="server"> 标识之后)发送脚本块,而 RegisterStartupScript() 在 Web 窗体的结尾处(在 </form> 标识之前)发送脚本块。

  RegisterStartupScript() 用于添加要在加载页面后运行的脚本块,通过这种方法添加的脚本块位于 Web 窗体的结尾处,因为必须在脚本运行前定义脚本要修改的 HTML 元素。也就是说,如果您要使用客户端脚本将焦点设置到文本框,必须确保文本框的 HTML 标记位于设置该文本框的焦点的脚本之前。脚本块包含<script></script>。

  RegisterClientScriptBlock() 方法用于为响应客户端事件而执行的脚本代码。通过此方法发送的脚本块位于 Web 页面的开始处,因为这种方法不要求将脚本块置于所有 HTML 元素之后,即它一般不使用文档内自定义的控件。脚本块不包含<script></script>。

  如果你仅仅是注册一些函数,这两者的效果是一样的。但如果你要注册一些全局的脚本,如定义一些全局变量并赋值,那么它在HTML中的先后位置可能就比较重要,此时就应该用RegisterStartupScript保证脚本能在前面被执行。