现在的位置: 首页 > 综合 > 正文

ASP.NET后台注册javascript脚本方法

2013年05月31日 ⁄ 综合 ⁄ 共 4008字 ⁄ 字号 评论关闭

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

注意:

.NET Framewrok 1.0/1.1中的Page.RegisterStartupScript

Page.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()方法是用来处理需要显示的数据信息. 一般调用连接数据库返回信息.


原创地址

抱歉!评论已关闭.