首页 > 开发 > AJAX > 正文

注册起动脚本,asp.net ajax的一项重要功能!_ajax教程

2024-09-01 08:34:05
字体:
来源:转载
供稿:网友

    最近的项目中一直在使用Atlas July CTP,自从Atlas正式更名后,连续推出了Beta和Beta2两个版本,不过我一直在观望,原因就是Beta版本不稳定而且升级太麻烦了。一日偶然看到了杨丹的这篇随笔,忽然发现原来ScriptManager能注册在客户端部分刷新的UpdatePanel中注册启动后执行的JavaScript!这可是困扰了我非常长时间的一个问题!这样不仅能在使用UpdatePanel的情况下使用Javascript弹出对话框,也能在研发使用Javascript脚本的服务器控件的时候,使控件的起动脚本得以执行,这样原来的和UpdatePanel不兼容的控件能非常容易的改为AJAX enabled^_^。
    不过,令人不解的是不知道处于什么考虑,RegisterStartupScript函数竟然实现为了类的静态函数,可是没有ScriptManager的UpdatePanel更本不能执行啊,这样还需要多打几个字!另外,需要注意的是第一个参数是UpdatePanel的实例,如果在页面中有多个UpdatePanel,如果每个UpdatePanel的UpdateMode都是“always”[默认值]的话,那么你使用那个UpdatePanel的实例作为参数都能;如果每个UpdaePanel的UpdateMode=conditional,那么你必须使用正在更新的那个UpdatePanel作为参数,这样脚本才能起作用。下面是我作的一个简单的示例:
页面标记
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>




    Untitled Page


   


           
           
           

           
LinkButton

               
                       
                   


           
               
                   
                    LinkButton
               

           
           

       
                   

                   
Please waiting, retrieving data from server


                     
   


代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
       
  }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(1000);
        TextBox1.Text = DateTime.Now.ToLongTimeString();
        TextBox2.Text = TextBox1.Text;
        string js = "alert(ok button1 clicked!)";
        Microsoft.Web.UI.ScriptManager.RegisterStartupScript(UpdatePanel2, this.GetType(), "btn1clicked", js, true);
    }
    protected void LinkButton2_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(900);
        TextBox2.Text = DateTime.Now.ToLongTimeString();
        TextBox1.Text = TextBox2.Text;
        string js = "alert(ok button 2 clicked!)";
   
        Microsoft.Web.UI.ScriptManager.RegisterStartupScript(UpdatePanel2, this.GetType(), "btn2clicked", js, true);
   
    }
}    BTW,我在使用时发现一个问题,不知道是个Bug还是我使用不当,我在调试中发现UpdatePanel.IsInPartialRendering的值始终是false!希望有高人指点一下:)。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表