注册起动脚本,ASP.NET AJAX的一项重要功能

ajax|asp.net|脚本

   最近的项目中一直在使用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" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
            <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server">
            </asp:ScriptManager>
            <br />
            <asp:updatepanel id="UpdatePanel1" UpdateMode="conditional"  runat="server"><ContentTemplate>
<asp:TextBox id="TextBox1" runat="server" ></asp:TextBox> <asp:LinkButton id="LinkButton1" runat="server" >LinkButton</asp:LinkButton>
</ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="LinkButton1" />   
                    </Triggers>
</asp:updatepanel>
            <asp:UpdatePanel ID="UpdatePanel2" RenderMode="block"  UpdateMode="always"  runat="server">
                <ContentTemplate>
                    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                    <asp:LinkButton ID="LinkButton2" runat="server" >LinkButton</asp:LinkButton>
                </ContentTemplate>
            </asp:UpdatePanel>
            <br />
        <div>
                    <br />
                    <asp:updateprogress id="UpdateProgress1" runat="server"><ProgressTemplate>
Please waiting, retrieving data from server
</ProgressTemplate>
</asp:updateprogress>
                     </div>
    </form>
</body>
</html>

代码
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!希望有高人指点一下:)。

时间: 2024-11-02 17:08:46

注册起动脚本,ASP.NET AJAX的一项重要功能的相关文章

注册起动脚本,ASP.NET AJAX的一项重要功能!

ajax|asp.net|脚本     最近的项目中一直在使用Atlas July CTP,自从Atlas正式更名后,连续推出了Beta和Beta2两个版本,但是我一直在观望,原因就是Beta版本不稳定而且升级太麻烦了.一日偶然看到了杨丹的这篇随笔,突然发现原来ScriptManager可以注册在客户端部分刷新的UpdatePanel中注册启动后执行的javascript!这可是困扰了我很长时间的一个问题!这样不但可以在使用UpdatePanel的情况下使用Javascript弹出对话框,也可以

注册起动脚本:ASP.NET AJAX的一项重要功能!

最近的项目中一直在使用Atlas July CTP,自从Atlas正式更名后,连续推出了Beta和Beta2两个版本,但是我一直在观望,原因就是Beta版本不稳定而且升级太麻烦了.一日偶然看到了杨丹的这篇随笔,突然发现原来ScriptManager可以注册在客户端部分刷新的UpdatePanel中注册启动后执行的javascript!这可是困扰了我很长时间的一个问题!这样不但可以在使用UpdatePanel的情况下使用Javascript弹出对话框,也可以在开发使用Javascript脚本的服务

asp.net+ajax+sqlserver自动补全功能实现解析

 这篇文章主要介绍了asp.net + ajax + sqlserver 自动补全功能,需要的朋友可以参考下 代码下载    说明:数据库连接字符串在web.config文件中,为方便运行使用的是官方的Northwind数据库.    参考(向其作者致敬):    ² http://www.loveweb8.com/plus/demo.php?aid=57这个例子是html源码.利用jquery.autocomplete插件利用js实现了自动补全功能.由于我的需要是结合sqlserver数据库表

asp.net+ajax+sqlserver自动补全功能实现解析_实用技巧

代码下载 说明:数据库连接字符串在web.config文件中,为方便运行使用的是官方的Northwind数据库. 参考(向其作者致敬): ² http://www.loveweb8.com/plus/demo.php?aid=57这个例子是html源码.利用jquery.autocomplete插件利用js实现了自动补全功能.由于我的需要是结合sqlserver数据库表实现自动补全功能.就下来就是将数据库表转为js数组,自然而然就想到了ajax. ² Asp.NetAjax的两种基本开发模式这篇

ASP.NET Ajax Library功能简介

ASP.NET Ajax Library中的一些功能,以及和jQuery的整合方式.首先来看ASP.NET Ajax Library中Client Controls的使用(底下的范例是水印的TextBox): 以下为引用的内容: <head>      <title>Untitled Page</title>      <style type="text/css">          .wm {            color:Gray

关天asp.net ajax beta中在updatepnael中注册脚本的解决方案

ajax|asp.net|脚本|解决 最近也在看一些asp.net ajax 的资料,在网上看到很多人都在问如何在updatepanel中注册脚本,我也试了一下,不过总是不行,就看了好多资料,最后才知道自己没有完全理解 ScriptManager.RegisterClientScriptBlock(Control control,Type type,string key, string script,bool addScriptTags),其中的各个参数.(注:RegisterClientScr

asp.net ajax beta中在updatepnael中注册脚本的解决方案

最近也在看一些asp.net ajax 的资料,在网上看到很多人都在问如何在updatepanel中注册脚本,我也试了一下,不过总是不行,就看了好多资料,最后才知道自己没有完全理解 ScriptManager.RegisterClientScriptBlock(Control control,Type type,string key, string script,bool addScriptTags),其中的各个参数.(注:RegisterClientScriptBlock是 ScriptMan

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程

在本篇文章中,我们将通过编写JavaScript来使用客户端行为扩展UpdateProgress控件,客户端代码将使用ASP.NET AJAX Library中的PageRequestManager,在UpdateProgress控件中,将添加一个Button,来允许用户取消异步更新,并且使用客户端脚本来显示或者隐藏进度信息. 一.通过客户端脚本取消异步更新 1.创建一个Web页面并切换到设计视图. 2.在工具箱中双击ScriptManager.UpdatePanel.UpdateProgres

asp.net AJAX注册类_实用技巧

1.注册命名空间 Type.registerNamespace("wallis"); 就是将wallis加入window中,然后就可以直接在任何地方使用该命名空间(window是全局的,而且使用时可以省略) 2.注册类 wallis.Animal.registerClass("wallis.Animal"); 在MicrosoftAjax.js中可以找到 Type.prototype.registerClass = function Type$registerCla