zoukankan      html  css  js  c++  java
  • ASP.NET后台注册javascript脚本方法

    ASP.NET使用新增的Page.ClientScript属性在ASP.NET页面上注册和使用Javascript函数.

    注意: .NET Framewrok 1.0/1.1中的Page.RegisterStartupScriptPage.RegisterClientScriptBlock方法已经被弃用,这两个用于注册脚本的方法需要一组键/值对,由于方法比较复杂,很可能发生键名冲突.Page.ClientScript属性把所有的脚本注册都放在一起,使代码不容易出错

    <1>使用Page.ClientScript.RegisterClientScriptBlock(注册到页面顶部)

    两种构建方式:

    1).RegisterClientScriptBlock(Type type,String key,String script); //类型,键,脚本

    2).RegisterClientScriptBlock(Type type,String key,String script,bool addScriptTags); //类型,键,脚本,是否添加脚本标记

    例子:

    <!--.aspx页面-->

    <asp:Button ID="btnScript" runat="server" OnClick="btnScript_Click" Text="点击输出javascript" />

     

    <!--.aspx.cs页面-->

    protected void btnScript_Click(object sender, EventArgs e)
    {
            MessageBox.Show(this,"myScript", "HelloWorld!!!");//Page对象,键名,消息.
    }

     

    /// <summary>
    /// 模拟Winform的MessageBox.Show();
    /// </summary>
    public class MessageBox
    {
        public static void Show(System.Web.UI.Page page,string key, string Message)
        {
            string myScript = @"alert('" + Message + "');";
            if (!page.ClientScript.IsClientScriptBlockRegistered(key))
            {
                page.ClientScript.RegisterClientScriptBlock(page.GetType(), key, myScript, true);
            }
        }
    }

    <2>使用Page.ClientScript.RegisterStartupScript(注册到页面底部)

    两种构建方式:

    1).RegisterStartupScript(Type type,String key,String script); //类型,键,脚本

    2).RegisterStartupScript(Type type,String key,String script,bool addScriptTags); //类型,键,脚本,是否添加脚本标记

    注意:这两种注册方法虽然只是注册部位不一样,但是区别很大.如果页面上有一些处理控件的JavaScript,应该使用RegisterStartupScript

    例子:

    <!--.aspx页面-->

    <asp:Button ID="btnScript" runat="server" OnClick="btnScript_Click" Text="点击输出javascript" />

    <asp:TextBox ID="txtMessage" runat="server">Hello ASP.NET!</asp:TextBox>

    //错误示范

    //<!--.aspx.cs页面(使用RegisterClientScriptBlock报错,找不到指定控件的ID) -->

    //protected void btnScript_Click(object sender, EventArgs e)
    //{
    //    string myScript = @"alert(document.forms[0]['txtMessage'].value);";
    //    if (! Page.ClientScript.IsClientScriptBlockRegistered("MyScript"))
    //    {
    //        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", myScript, true);
    //    }
    //}

    //正确示范

    <!--.aspx.cs页面(应该使用RegisterStartupScript) -->

    protected void btnScript_Click(object sender, EventArgs e)
    {
        string myScript = @"alert(document.forms[0]['txtMessage'].value);";
        if (! Page.ClientScript.IsStartupScriptRegistered("MyScript"))
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "MyScript", myScript, true);
        }
    }

    <3>使用Page.ClientScript.RegisterClientScriptInclude(引用.js文件)

    //C#中:

    string myScript = "myJsCode.js";

    Page.ClientScript.RegisterClientScriptInclude("myKey",myScript);

    //这会在ASP.NET中生成以下代码

    <script scr="myJsCode.js" type="text/javascript"></script>

     

     

    <4>使用回调功能(Ajax效果)

    步骤:

    1)在ASP.NET建立<input type='button' .../>

    2)写入调用javscript

    3)在.aspx.cs页面中实现ICallBackEventHandler接口

    4)实现接口的两个方法:GetCallbackResult,RaiseCallbackEvent

    5)在Page_Load里面注册脚本

     

    例子:

    <!-- aspx页面 -->

    <script language="javascript" type="text/javascript">
            function GetNumber()
            {
                UseCallBack(); //回调函数
            }

            //用来接受返回信息并显示
            function GetRandom(TextBox1, content)
            {
                document.forms[0].txtMessage.value = TextBox1;
            }
    </script>

     

     

    <asp:TextBox ID="txtMessage" runat="server"></asp:TextBox>
    <input id="btn" type="button" value="GetRandom" onclick="GetNumber()" />

     注意:<asp:button>不能在这里使用

     

    <!-- aspx.cs页面 -->

     public partial class CallBackPage: System.Web.UI.Page,System.Web.UI.ICallbackEventHandler

    {

        private string _callbackResult = null;
        protected void Page_Load(object sender, EventArgs e)
        {

            //GetRandom是方法名, 不需要括号()
            string reference = Page.ClientScript.GetCallbackEventReference(this, "arg", "GetRandom", "content");
            string myScript = @"function UseCallBack(arg,content)" + "{" + reference + ";" + "}";
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", myScript, true);
        }

        #region ICallbackEventHandler 成员(实现接口)

        string ICallbackEventHandler.GetCallbackResult()
        {
            return _callbackResult;
        }

        void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
        {
            Random random = new Random();
            _callbackResult = random.Next().ToString();
        }
        #endregion

    }

     

    Page_Load,GetCallbackResult() 写法趋于固定, 只需要换方法名即可.

    RaiseCallbackEvent()方法是用来处理需要显示的数据信息. 一般调用连接数据库返回信息.

  • 相关阅读:
    Java8 新特性(一)- Lambda 表达式
    省选知识复习
    [JSOI2016]灯塔/[POI2011]Lightning Conductor
    [十二省联考2019]春节十二响
    [tyvj1858]XLKxc
    [CF995F]Cowmpany Cowmpensation
    [集训队互测]calc
    拉格朗日插值法入门
    [TJOI2017]异或和
    [noi.ac省选模拟赛]第12场题解集合
  • 原文地址:https://www.cnblogs.com/luoyaoquan/p/2067384.html
Copyright © 2011-2022 走看看