`

.Net后台使用RegisterClientScriptBlock和RegisterStartupScript调用前台的JS 区别

阅读更多

this.Page.ClientScript.RegisterClientScriptBlock() 和this.Page.ClientScript.RegisterStartupScript()的区别

aspx页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RegsterClientJs.aspx.cs" Inherits="Ajax.Study.RegsterClientJs" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Register Client Script</title>
    <script type="text/javascript">
        function Test(nodeId) {
            document.getElementById(nodeId).style.display = "none";
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="tbName" runat="server" Text="name"></asp:TextBox>
        <asp:TextBox ID="tbAge" runat="server" Text="age"></asp:TextBox>
        <asp:Button ID="BtnTest" runat="server" Text="RegisterStartupScript 隐藏age输入框" onclick="BtnTest_Click" />
        <asp:Button ID="BtnTest2" runat="server" 
            Text="RegisterClientScriptBlock 隐藏age输入框" onclick="BtnTest2_Click"  />
    </div>
    </form>
</body>
</html>

后台代码:

       protected void Page_Load(object sender, EventArgs e)
       {
           
       }
       /// <summary>
       ///
使用RegisterStartupScript注册js脚本
      
/// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
      
protected void BtnTest_Click(object sender, EventArgs e)
       {
           //注册到 <form> 尾部 ,HTML元素已加载完毕
          
this.Page.ClientScript.RegisterStartupScript(this.GetType(), "age1", "Test('" + tbAge.ClientID + "');", true);
       }

      
       /// <summary>
       ///
使用RegisterClientScriptBlock注册js脚本
      
/// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
      
protected void BtnTest2_Click(object sender, EventArgs e)
       {
           //注册到<form> 头部 ,此时HTML还未加载!
           //js会报 缺少对象
          
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "age2", "Test('" + tbAge.ClientID + "');", true);
       }

运行程序后,查看源文件就会看到他们的巨大差别!这里我就懒得贴图了!见谅。


另:如果你是用了ajax的UpdatePanel控件在试一试上面的代码呢?(把上面的div内容放在UpdatePanel里面)

<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="sm" runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
    <div>
        <asp:TextBox ID="tbName" runat="server" Text="name"></asp:TextBox>
        <asp:TextBox ID="tbAge" runat="server" Text="age"></asp:TextBox>
        <asp:Button ID="BtnTest" runat="server" Text="RegisterStartupScript 隐藏age输入框" onclick="BtnTest_Click" />
        <asp:Button ID="BtnTest2" runat="server" 
            Text="RegisterClientScriptBlock 隐藏age输入框" onclick="BtnTest2_Click"  />
    </div>
     </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
  
后台代码:
/// <summary>
        /// 使用RegisterStartupScript注册js脚本
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnTest_Click(object sender, EventArgs e)
        {
            //注册到 <form> 尾部 ,HTML元素已加载完毕
            //this.Page.ClientScript.RegisterStartupScript(this.GetType(), "age1", "Test('" + tbAge.ClientID + "');", true);

            //UpdatePanel 是用ajax后用上面的没有效果
            ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "age1", "Test('" + tbAge.ClientID + "');", true);

        }
        /// <summary>
        /// 使用RegisterClientScriptBlock注册js脚本
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnTest2_Click(object sender, EventArgs e)
        {
            //注册到<form> 头部 ,此时HTML还未加载!
            //js会报 缺少对象 
            
            //this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "age2", "Test('" + tbAge.ClientID + "');", true);

            //使用ajax的UpdatePanel 后
             //页面上的this.UpdatePanel1控件ID
            ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, typeof(Page), "key1", "Test('" + tbAge.ClientID + "');", true);
        }

 

效果实现了撒,而且没有刷新!好像使用了UpdatePanel1后RegisterClientScriptBlock也没有报错了!当然这个示例只是为了我学习RegisterStartupScript和RegisterClientScriptBlock的区别! 以上功能可以直接用客服端js就实现了没有必要再后台处理!

分享到:
评论

相关推荐

    .net后台弹出提示消息代码

    在.NET开发中,有时我们需要在后台代码中向前端用户显示一些提示信息,比如确认操作、错误消息或成功通知。这通常通过注入JavaScript代码到HTML响应中实现,因为浏览器端的JavaScript可以直接与用户交互。以下是一些...

    net后台执行前台js方法

    // 最后,讲一下RegisterStartupScript和RegisterClientScriptBlock的差别: // Page.ClientScript.RegisterStartupScript(Page.GetType(),"alert1", "alert&#40;'test'&#41;",true); //在生成页面的后半部分!! //...

    Asp.net后台弹出提示方法

    ASP.NET 后台弹出提示方法 在 ASP.NET 开发中,弹出提示信息是非常常见的需求,例如,在用户提交表单时,提示用户操作成功或失败。在这篇文章中,我们将讨论 ASP.NET 后台弹出提示方法的多种实现方式。 1. 使用 ...

    asp.net异步调用后台方法提交

    在ASP.NET开发中,为了提升用户体验和页面响应速度,异步调用后台方法是一种常见的技术手段。本文将详细介绍如何在ASP.NET中实现异步调用后台方法,并解释相关的代码实现细节。 #### 一、异步调用背景与优势 异步...

    asp.net 在cs中如何调用js的代码

    本文将详细介绍如何在ASP.NET的C#代码中调用JavaScript脚本,以及如何有效地利用这些技术来增强用户界面的交互性和响应性。 ### 一、ASP.NET与JavaScript交互的重要性 在现代Web开发中,客户端脚本(如JavaScript...

    asp.net中javascript通用类

    不过,随着技术的发展,现代Web开发中更多地倾向于使用库和框架(如jQuery、React、Vue等),它们提供了更高级别的抽象和封装,但掌握JavaScript基础和如何在ASP.NET中有效利用JavaScript仍然是每个Web开发者必备的...

    ASP.NET 2.0创建母版页引来的麻烦-js无用

    ASP.NET提供了`ScriptManager.RegisterStartupScript`或`ScriptManager.RegisterClientScriptBlock`等方法,可以在页面渲染时动态注册脚本,确保脚本在正确的时间点执行。 #### 4. 避免直接使用`document....

    后台注册前台脚本代码

    后台注册脚本是ASP.NET提供的一种功能,它允许开发者在服务器端创建和添加JavaScript代码,然后这些代码会在页面响应发送到客户端时自动插入到HTML中适当的位置。这样,当页面在浏览器中加载时,这些JavaScript脚本...

    JavaScript和ASP.NET的传值

    为了解决这个问题,我们可以使用`ClientIDMode`属性来保持服务器控件的ID不变,或者使用`RegisterStartupScript`或`RegisterClientScriptBlock`方法在服务器端生成JavaScript代码,以便在客户端执行时能正确引用控件...

    ASP.NET中不同部分的js代码的执行顺序

    因此,尽管在C#代码中先调用了`Page.RegisterStartupScript`,但实际执行时会先执行通过`ScriptManager.RegisterClientScriptBlock`注册的脚本。这是因为`&lt;head&gt;`标签中的内容会先于`&lt;body&gt;`标签中的内容被解析和...

    基于JavaScript与ASP.NET的网站开发技术.pdf

    在ASP.NET 2.0之前,需要使用RegisterStartupScript和RegisterClientScriptBlock方法。但是,这两个方法已经被淘汰。现在,可以使用Page.ClientScript属性来注册脚本。 5. JavaScript事件在服务器控件中的应用 ...

    ASP.NET AJAX时用alert弹出对话框

    ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), “click”, “alert&#40;‘删除成功”+queryId+”‘&#41;”, true);解决 asp.net onClientClick 与 验证控件冲突问题[removed] function ...

    ASP.NET 课后习题集答案

    本资源摘要信息涵盖了 ASP.NET 的基础知识、ASP.NET 的开发环境搭建、ASP.NET 的编程语言特性、ASP.NET 的控件使用、ASP.NET 的事件处理等方面的知识点。 一、ASP.NET 概述 ASP.NET 是 Microsoft.NET Framework 的...

    asp.net 移动没有标题栏的窗口源码

    7. **客户端脚本交互**:VB.NET代码可以通过RegisterStartupScript或RegisterClientScriptBlock方法将JavaScript代码注入到客户端,实现服务器端和客户端的交互。 总的来说,这个"asp.net 移动没有标题栏的窗口源码...

    ASP.NET中后台注册js脚本使用的方法对比

    用Page.ClientScript.RegisterClientScriptBlock 和Page.ClientScript.RegisterStartupScript:区别: 1.使用Page.ClientScript.RegisterClientScriptBlock c#代码 代码如下: &lt;&#37;@ Page Language=”C#” %&gt; ...

    aspnet操作javascript类

    二是通过脚本注册,使用Page.RegisterStartupScript或Page.ClientScript.RegisterClientScriptBlock方法在页面加载时动态添加JavaScript代码。这样可以实现页面的异步更新,提高用户体验。 JavaScript类在Web开发中...

    asp.net:Page类和回调技术

    例如,你可以使用RegisterStartupScript方法在页面上动态插入JavaScript代码,或者使用RegisterClientScriptBlock方法在页面头部插入自定义的JavaScript块。 最后,我们要了解回调技术,也就是CallBack。在传统的...

    .net ,Ajax 文档

    若需在客户端执行JavaScript,可以使用ScriptManager的RegisterStartupScript或RegisterClientScriptBlock方法来动态发送JavaScript脚本。 总之,ASP.NET AJAX框架极大地简化了AJAX应用的开发,通过服务器端控件和...

Global site tag (gtag.js) - Google Analytics