ASP.NET AJAX入门系列(2):使用ScriptManager控件

ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAXASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,以及调用AuthenticationServiceProfileService,还有页面错误处理等。

 

主要内容

1.控件概述

2.一个简单的示例

3.客户端脚本模式

4.错误处理

5Services属性

6Scripts属性

 

一.控件概述

ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAXASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,还可以指定页面错误处理等。

使用<asp:ScriptManager/>来定义一个ScriptManager,简单的ScriptManager定义形式:

<asp:ScriptManager ID="ScriptManager1" 

                   runat
="server">

      
<AuthenticationService Path="" />

      
<ProfileService LoadProperties="" Path="" />

      
<Scripts>

        
<asp:ScriptReference/>

      
</Scripts>

      
<Services>

        
<asp:ServiceReference />

      
</Services>

</asp:ScriptManager>
ScriptManager
属性和方法如下:

 

属性/方法

描述

AllowCustomError

Web.config中的自定义错误配置区<customErrors>相联系,是否使用它,默认值为true

AsyncPostBackErrorMessage

异步回传发生错误时的自定义提示错误信息,

AsyncPostBackTimeout

异步回传时超时限制,默认值为90,单位为秒

EnablePartialRendering

是否支持页面的局部更新,默认值为True,一般不需要修改

ScriptMode

指定ScriptManager发送到客户端的脚本的模式,有四种模式:AutoInheritDebugRelease,默认值为Auto,后面会仔细说到。

ScriptPath

设置所有的脚本块的根目录,作为全局属性,包括自定义的脚本块或者引用第三方的脚本块。如果在Scripts中的<asp:ScriptReference/>标签中设置了Path属性,它将覆盖该属性。

OnAsyncPostBackError

异步回传发生异常时的服务端处理函数,在这里可以捕获一场信息并作相应的处理。

OnResolveScriptReference

指定ResolveScriptReference事件的服务器端处理函数,在该函数中可以修改某一条脚本的相关信息如路径、版本等。

 

二.一个简单的示例

这个例子其实是UpdatePanel示例,在页面中加入了日期控件和一个下拉框,根据下拉框选择的不同,日期控件背景变为不同的颜色。示例代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

 

<script runat="server">

    
void DropDownSelection_Change(Object sender, EventArgs e)

    
{

        Calendar1.DayStyle.BackColor 
=

            System.Drawing.Color.FromName(ColorList.SelectedItem.Value);

    }


</script>

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

    
<title>ScriptManager Example</title>

</head>

<body>

    
<form id="form1" runat="server">

        
<div>

            
<asp:ScriptManager ID="ScriptManager1" 

                               runat
="server">

            
</asp:ScriptManager>

            
<asp:UpdatePanel ID="UpdatePanel1"

                             runat
="server">

                
<ContentTemplate>

                    
<asp:Calendar ID="Calendar1" 

                                  ShowTitle
="True"

                                  runat
="server" />

                    
<div>

                        Background:

                        
<br />

                        
<asp:DropDownList ID="ColorList" 

                                          AutoPostBack
="True" 

                                          OnSelectedIndexChanged
="DropDownSelection_Change"

                                          runat
="server">

                            
<asp:ListItem Selected="True" Value="White"> 

                            White 
</asp:ListItem>

                            
<asp:ListItem Value="Silver"> 

                            Silver 
</asp:ListItem>

                            
<asp:ListItem Value="DarkGray"> 

                            Dark Gray 
</asp:ListItem>

                            
<asp:ListItem Value="Khaki"> 

                            Khaki 
</asp:ListItem>

                            
<asp:ListItem Value="DarkKhaki"> D

                            ark Khaki 
</asp:ListItem>

                        
</asp:DropDownList>

                    
</div>

                
</ContentTemplate>

            
</asp:UpdatePanel>

            
<br />

        
</div>

    
</form>

</body>

</html>

 

三.客户端脚本模式

在前面我们提到了ScriptMode属性指定ScriptManager发送到客户端的脚本的模式,它有四种模式:AutoInheritDebugRelease,默认值为Auto

1Auto:它会根据Web站点的Web.config配置文件来决定使用哪一种模式,只有当配置文件中retail属性设置为false:

<system.web>

  
<deployment retail="false" />

</system.web>

或者页面中的Debug指令设为true的时候会使用Debug版本,其他的情况都会使用Release版本。

<%@ Page Language="C#" Debug="true"

AutoEventWireup
="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

2Inherit:应该是通过程序设置ScriptMode的时候,等同于Auto?(不太了解)

3Debug:客户端脚本使用Debug版本,除非retail属性设为true

4Release:客户端脚本使用Release版本,除非retail属性设为false

 

四.错误处理

在页面回传时如果发生了异常AsyncPostBackError事件将被触发,错误信息的处理依赖于AllowCustomErrors属性、AsyncPostBackErrorMessage属性和Web.config中的<customErrors>配置区。下面看一个简单的错误处理例子,在AsyncPostBackError事件中捕获到异常信息并设置AsyncPostBackErrorMessage属性。

<%@ Page Language="C#" %>

<script runat="server">

    protected 
void ErrorProcessClick_Handler(object sender, EventArgs e)

    
{
        
// This handler demonstrates an error condition. In this example

        
// the server error gets intercepted on the client and an alert is shown. 

        
throw new ArgumentException();
    }


    protected 
void SuccessProcessClick_Handler(object sender, EventArgs e)

    
{
        
// This handler demonstrates no server side exception.

        UpdatePanelMessage.Text 
= "The asynchronous postback completed successfully.";

    }


    protected 
void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)

    
{
        ScriptManager1.AsyncPostBackErrorMessage 
= "异常信息为:" + e.Exception.Message;

    }


</script>


<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

    
<title>PageRequestManager endRequestEventArgs Example</title>

    
<style type="text/css">

    body 
{

        font-family
: Tahoma;

    
}


    #AlertDiv
{

    left
: 40%; top: 40%;

    position
: absolute; width: 200px;

    padding
: 12px; 

    border
: #000000 1px solid;

    background-color
: white; 

    text-align
: left;

    visibility
: hidden;

    z-index
: 99;

    
}


    #AlertButtons
{

    position
: absolute;

    right
: 5%;

    bottom
: 5%;

    
}


    
</style>

</head>

<body id="bodytag">

    
<form id="form1" runat="server">

        
<div>

            
<asp:ScriptManager ID="ScriptManager1" runat="server" 
            OnAsyncPostBackError
="ScriptManager1_AsyncPostBackError">

            
</asp:ScriptManager>
 
            
<script type="text/javascript" language="javascript">

                
var divElem = 'AlertDiv';

                
var messageElem = 'AlertMessage';

                
var errorMessageAdditional = 'Please try again.';

                
var bodyTag = 'bodytag';
                Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

                
function ToggleAlertDiv(visString)
                
{
                     
if (visString == 'hidden')

                     
{
                         $get(bodyTag).style.backgroundColor 
= 'white';                         
                     }

                     
else
                     
{
                         $get(bodyTag).style.backgroundColor 
= 'gray';                         

                     }


                     
var adiv = $get(divElem);

                     adiv.style.visibility 
= visString;

                }


                
function ClearErrorState() {

                     $get(messageElem).innerHTML 
= '';

                     ToggleAlertDiv('hidden');                     

                }

                
function EndRequestHandler(sender, args)

                
{
                   
if (args.get_error() != undefined && args.get_error().httpStatusCode == '500')
                   
{

                       
var errorMessage = args.get_error().message

                       args.set_errorHandled(
true);

                       ToggleAlertDiv('visible');

                       $get(messageElem).innerHTML 
= '"' + 

                                errorMessage + '
" ' + errorMessageAdditional;

                   }


                }


            
</script>

            
<asp:UpdatePanel runat="Server" UpdateMode="Conditional" ID="UpdatePanel1">

                
<ContentTemplate>

                    
<asp:Panel ID="Panel1" runat="server" GroupingText="Update Panel">

                        
<asp:Label ID="UpdatePanelMessage" runat="server" />

                        
<br />

                        Last update:

                        
<%= DateTime.Now.ToString() %>

                        .

                        
<br />

                        
<asp:Button runat="server" ID="Button1" Text="Submit Successful Async Postback"

                            OnClick
="SuccessProcessClick_Handler" OnClientClick="ClearErrorState()" />

                        
<asp:Button runat="server" ID="Button2" Text="Submit Async Postback With Error"

                            OnClick
="ErrorProcessClick_Handler" OnClientClick="ClearErrorState()" />

                        
<br />

                    
</asp:Panel>

                
</ContentTemplate>

            
</asp:UpdatePanel>

            
<div id="AlertDiv">

                
<div id="AlertMessage">

                
</div>

                
<br />

                
<div id="AlertButtons" >

                    
<input id="OKButton" type="button" value="OK" 

                           runat
="server" onclick="ClearErrorState()" />

                
</div>

           
</div>

    
</form>

</body>

</html>

运行后时界面:

发生异常信息:

 

五.Services属性

Services用来管理对WebService的调用,通过<asp:ServiceReference>标签可以在Services中注册一个WebService,在运行时ScriptManager将为每一个ServiceReference对象生成一个客户端代理,<asp:ServiceReference>标签一个很重要的属性是Path,用来指定WebService的路径,如下所示:

<asp:ScriptManager ID="SM1" runat="server">

    
<Services>

        
<asp:ServiceReference Path="Service.asmx"/>

    
</Services>

</asp:ScriptManager>

看一个简单的调用WebService的例子:

WebService如下,注意在WebServiceSample上加ScriptService特性:

[ScriptService]

public class WebServiceSample : System.Web.Services.WebService {

    
public WebServiceSample()

    
{

        
//Uncomment the following line if using designed components 

        
//InitializeComponent(); 

    }



    [WebMethod]

    
public string EchoString(String s)

    
{
        
return "Hello " + s;
    }


}

ASPX页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    
<title>Untitled Page</title>

</head>

<script type="text/javascript" language="JavaScript">

    
function OnbuttonGo_click() 

    
{
        requestSimpleService 
= WebServiceSample.EchoString(

            document.getElementById('inputName').value,       
//params

            OnRequestComplete    
//Complete event

            );

        
return false;
    }


    
function OnRequestComplete(result) 

    
{
        alert(result);
    }


</script>

<body>

    
<form id="form1" runat="server">

    
<asp:ScriptManager ID="ScriptManager1" runat="server">

        
<Services>

            
<asp:ServiceReference Path="WebServiceSample.asmx"/>

        
</Services>

    
</asp:ScriptManager>

    
<div>

        
<input type="text" id="inputName" size=20/>

        
<input id="button" type="button" value="调 用" onclick="return OnbuttonGo_click()" /></div>

    
</form>

</body>

</html>

运行后效果如下:

当然了也可以在运行时动态的在Services中加入ServiceReference,下面看一个运行时动态加入ServiceReference的例子:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

<script runat="server">

    
void Page_Load(object sender, EventArgs e)

    
{

        ServiceReference sr 
= new ServiceReference();

        sr.Path 
= "WebServiceSample.asmx";

        ScriptManager1.Services.Add(sr);

    }


</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    
<title>Untitled Page</title>

</head>

<script type="text/javascript" language="JavaScript">

    
function OnbuttonGo_click() 

    
{

        requestSimpleService 
= WebServiceSample.EchoString(

            document.getElementById('inputName').value,       
//params

            OnRequestComplete    
//Complete event

            );

        
return false;

    }


 

    
function OnRequestComplete(result) 

    
{

        alert(result);

    }


</script>

 

<body>

    

    
<form id="form1" runat="server">

    
<asp:ScriptManager ID="ScriptManager1" runat="server">

    
</asp:ScriptManager>

    
<div>

        
<input type="text" id="inputName" size=20/>

        
<input id="button" type="button" value="调 用" onclick="return OnbuttonGo_click()" /></div>

    
</form>

</body>

</html>

可以看到运行后和在ScriptManager中直接加入的效果是一样的。

 

六.Scripts属性

关于Scripts属性到后面具体再说吧,最主要的属性有Path指定脚本的路径,ScriptMode指定客户端脚本的模式,它会覆盖ScriptManager中的ScriptMode属性,还有一个属性是IgnoreScriptPath,指定是否忽略掉ScriptManager中的ScriptPath属性。

关于ScriptManager控件就学习到这里了,至于AuthenticationService属性和ProfileService属性都很简单。

示例代码下载:http://files.cnblogs.com/Terrylee/ASPNETAJAXScriptManagerDemo.rar

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-10-25 23:16 TerryLee 阅读(111282) 评论(185) 编辑 收藏

评论共2页: 上一页 1 2 
 回复 引用   
#63楼 2007-01-31 14:13 snryang[未注册用户]
我是来学习的,嘿嘿~~
 回复 引用   
#64楼 2007-01-31 15:58 vicky[未注册用户]
未能加载文件或程序集“Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。

我是aja新手 请指点下 谢谢

 回复 引用   
#65楼 2007-01-31 16:18 vicky[未注册用户]
我是载了您的源码 运行出现的这个问题!
 回复 引用   
#66楼 2007-02-02 11:23 cc[未注册用户]
不错哦
 回复 引用 查看   
#67楼 2007-02-05 18:37 吴杰      
学习中,非常感谢
 回复 引用 查看   
#68楼 2007-02-06 10:47 Talent_XQ      
调试AsyncPostBackErrorMessage的时候出问题
$get() 方法执行不过去!!
function ToggleAlertDiv(visString)
{
if (visString == 'hidden')

{
$get(bodyTag).style.backgroundColor = 'white'; \\这地方缺少对象???????????
}
else
{
$get(bodyTag).style.backgroundColor = 'gray';

}

var adiv = $get(divElem);

adiv.style.visibility = visString;

}

 回复 引用 查看   
#69楼 2007-02-06 15:00 Talent_XQ      
晕了 调试 webservie的时候又出错了:
function OnbuttonGo_click()

{
requestSimpleService = WebServiceSample.EchoString(//这地方,对象不支持属性和方法?????、

document.getElementById('inputName').value, //params

OnRequestComplete //Complete event

);

return false;
}
代码都不能调出来,怎么说服人啊????

 回复 引用 查看   
#70楼 2007-02-06 15:18 Talent_XQ      
我把上面给的例子下载下来,调试。。。

错误 1 未能加载文件或程序集“Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。 F:\2.6\ScriptManagerDemo\Web.config 38
错误 2 F:\2.6\ScriptManagerDemo\Default.aspx: ASP.NET 运行时错误: 未能加载文件或程序集“Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。 (F:\2.6\ScriptManagerDemo\web.config line 38) F:\2.6\ScriptManagerDemo\Default.aspx 1 1 F:\2.6\ScriptManagerDemo\
警告 3 未声明“requirePermission”属性。 F:\2.6\ScriptManagerDemo\Web.config 7 206 F:\2.6\ScriptManagerDemo\
警告 4 未声明“requirePermission”属性。 F:\2.6\ScriptManagerDemo\Web.config 8 200 F:\2.6\ScriptManagerDemo\
警告 5 未声明“requirePermission”属性。 F:\2.6\ScriptManagerDemo\Web.config 9 214 F:\2.6\ScriptManagerDemo\
消息 6 未能找到元素“microsoft.web”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 50 3 F:\2.6\ScriptManagerDemo\
消息 7 未能找到元素“scripting”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 51 4 F:\2.6\ScriptManagerDemo\
消息 8 未能找到元素“webServices”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 52 5 F:\2.6\ScriptManagerDemo\
消息 9 未能找到元素“validation”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 77 4 F:\2.6\ScriptManagerDemo\
消息 10 未能找到属性“validateIntegratedModeConfiguration”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 77 15 F:\2.6\ScriptManagerDemo\
消息 11 未能找到元素“modules”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 78 4 F:\2.6\ScriptManagerDemo\
消息 12 未能找到元素“add”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 79 5 F:\2.6\ScriptManagerDemo\
消息 13 未能找到属性“name”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 79 9 F:\2.6\ScriptManagerDemo\
消息 14 未能找到属性“preCondition”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 79 29 F:\2.6\ScriptManagerDemo\
消息 15 未能找到属性“type”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 79 59 F:\2.6\ScriptManagerDemo\
消息 16 未能找到元素“handlers”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 81 4 F:\2.6\ScriptManagerDemo\
消息 17 未能找到元素“remove”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 82 5 F:\2.6\ScriptManagerDemo\
消息 18 未能找到属性“name”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 82 12 F:\2.6\ScriptManagerDemo\
消息 19 未能找到元素“add”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 83 5 F:\2.6\ScriptManagerDemo\
消息 20 未能找到属性“name”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 83 9 F:\2.6\ScriptManagerDemo\
消息 21 未能找到属性“verb”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 83 37 F:\2.6\ScriptManagerDemo\
消息 22 未能找到属性“path”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 83 46 F:\2.6\ScriptManagerDemo\
消息 23 未能找到属性“preCondition”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 83 60 F:\2.6\ScriptManagerDemo\
消息 24 未能找到属性“type”的架构信息。 F:\2.6\ScriptManagerDemo\Web.config 83 90 F:\2.6\ScriptManagerDemo\

 回复 引用 查看   
#71楼[楼主] 2007-02-07 16:58 TerryLee      
@Talent_XQ
是你使用的版本有问题吧,这些都是在Beta1上面调试的,后面的RC版和正式版都有不小的变化,请首先确定自己使用的ASP.NET AJAX版本

 回复 引用 查看   
#72楼 2007-02-08 23:45 goalbell      
学习了,掌握好基础!
 回复 引用   
#73楼 2007-02-21 10:49 panda[未注册用户]
对于正式版,我来说几句话,给不能通过测试的朋友一些提示。我也搞了很久才搞出来。

1 [ScriptService]
要添加 using System.Web.Script.Services;
和System.Web.Extensions引用
2
namespace SM
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class AjaxService : System.Web.Services.WebService
{

[WebMethod]
public string HelloWorld(string name)
{
return name + " Hello World";
}
}
}
3 js要把命名空间写上,如下
<script type="text/javascript" language="JavaScript">

function OnbuttonGo_click()
{
SM.AjaxService.HelloWorld(
document.getElementById('inputName').value, //params
OnRequestComplete //Complete event
);

return false;
}

function OnRequestComplete(result)
{
alert(result);
}

</script>

 回复 引用 查看   
#74楼 2007-02-24 07:27 若寒      
搞了N久,终于OK了.
加了[System.Web.Script.Services.ScriptService]就OK!

 回复 引用   
#75楼 2007-02-25 11:34 hi[未注册用户]
错误处理中遇到问题:
throw new ArgumentException();
提示:throw new ArgumentException();
初学者!
谢了!

 回复 引用   
#76楼 2007-02-25 11:36 hi[未注册用户]
错误处理中遇到问题:
throw new ArgumentException();
提示:值不在预期的范围内。
初学者!
谢了!

 回复 引用   
#77楼 2007-02-28 10:08 youyuan[未注册用户]
谁能帮我解决一下 sys 未定义的问题呀?
 回复 引用   
#78楼 2007-03-07 00:36 RC[未注册用户]
requestSimpleService = WebServiceSample.EchoString(
document.getElementById('inputName').value, //params
OnRequestComplete //Complete event
);
return false;
浏览后,ie6老是报“websampleservice未定义”,上面的回复都看了,都试了,还是没解决,急求解(我是最近下的asp.net ajax)

 回复 引用 查看   
#79楼 2007-03-14 18:48 YanziMyWife      
四.错误处理
没看懂

 回复 引用 查看   
#80楼 2007-03-14 18:55 YanziMyWife      
我这里怎么怎么弹不出对话框而是在页面上显示啊
 回复 引用   
#81楼 2007-03-17 14:29 snow[未注册用户]
真得非常的感谢,您辛苦了,注意身体呀
 回复 引用 查看   
#82楼 2007-03-19 18:31 汪洋怡舟      
<asp:ListItem Selected="True" Value="White">

White </asp:ListItem>

<asp:ListItem Value="Silver">

Silver </asp:ListItem>

<asp:ListItem Value="DarkGray">

Dark Gray </asp:ListItem>

<asp:ListItem Value="Khaki">

Khaki </asp:ListItem>

<asp:ListItem Value="DarkKhaki"> D

ark Khaki </asp:ListItem>

</asp:DropDownList>
当下拉列表中出现中文时候好像不支持!


 回复 引用 查看   
#83楼 2007-03-20 12:31 edrp.cn      
博主您好:
在看了您上面的示例二后,觉得UpdatePanel用不用都可以,请问为什么要使用UpdatePanel,而我加入的ScriptManager好像也没有用,删除ScriptManager一样可以,初学,谢谢?
TO:汪洋怡舟
可以支持中文的,将Text属性设置成显示的中文,将Value设置成传入的值就可以了

 回复 引用   
#84楼 2007-03-25 21:35 未醉浅逃[未注册用户]
请允许我提个意见:
为什么代码里面都没有注释啊?
看起来好吃力
不是说是入门的吗?虽然例子是简单例子,但有些地方看起来跟自己的思路不一样就比较吃力了。。。。

 回复 引用   
#85楼 2007-03-26 20:48 扑街仔
我很想知道为什么有时候javascript要放在scriptManager后面才有效啊。可否回答一下.谢谢.
 回复 引用   
#86楼 2007-03-26 20:51 扑街仔
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
还有这局 看不懂

 回复 引用   
#87楼 2007-03-27 17:25 扑街仔
我想问一下requestSimpleService为什么没有声明 就 可以用了。难道javascript可以??
 回复 引用 查看   
#88楼 2007-04-05 17:14 yfu      
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

这些客户端的东西是怎么来的呢!?实在是看不懂,麻烦你了,上面有好多人问呢!!说一下下吧!!

 回复 引用   
#89楼 2007-04-10 13:55 LY[未注册用户]
太好了,终于让我找到了。
 回复 引用   
#90楼 2007-04-11 16:32 LG[未注册用户]
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
对这段困惑的看看这里:
http://www.cnblogs.com/hblynn/archive/2007/01/31/635507.html

 回复 引用   
#91楼 2007-04-14 10:58 myt[未注册用户]
好,谢谢了,帮了我大忙了
 回复 引用 查看   
#92楼 2007-05-30 16:02 C Sharp      
学习了阿 呵呵
 回复 引用   
#94楼 2007-08-14 16:32 ricky[未注册用户]
作为新手,强烈学习!!!谢谢
 回复 引用 查看   
#95楼 2007-08-29 22:00 遭雷劈      
很好,很强大
配合着官网的教学视频看,无敌了

 回复 引用   
#96楼 2007-09-11 10:45 王明星[未注册用户]
李大哥!你好啊!我想问一下在javascript中$符号是做用的呢,还有就是
function EndRequestHandler(sender, args)
{
if (args.get_error() != undefined && args.get_error().httpStatusCode == '500')
{
var errorMessage = args.get_error().message
args.set_errorHandled(true);
ToggleAlertDiv('visible');
$get(messageElem).innerHTML = '"' + errorMessage + '" ' + errorMessageAdditional;
}
}

这个事件如何处理后台页面的呢!

 回复 引用   
#97楼 2007-12-15 00:20 11133333[未注册用户]
12222
 回复 引用   
#98楼 2007-12-18 17:04 beyondme[未注册用户]
我是ajax的初学者,在做第2个例子的时候到下边这句话就执行不过去了
throw new ArgumentException();

而且执行的时候的截面和您给出的也不太一样.
请教是怎么回事呀?

 回复 引用 查看   
#99楼 2007-12-27 13:04 夕阳夕下      
谢谢楼主,我每天都来你这学习
 回复 引用   
#100楼 2008-01-16 16:28 玉鱼[未注册用户]
不错,学习一下,不过好多错误哦,还是要感谢楼主
 回复 引用   
#101楼 2008-02-29 14:45 liaobing[未注册用户]
为什么我的异常处理就是出不来呢,真郁闷啊 都不知道该如何调试 希望楼主能快点帮我解决一下这个问题 。谢谢!
 回复 引用 查看   
#102楼 2008-02-29 16:20 博览群书      
谢谢TerryLee,努力学习中。
 回复 引用   
#103楼 2008-02-29 16:21 liaobing[未注册用户]
这个东西实在是太好玩了,太神奇了。我终于调通了。可以了 那个异常的div弹出来了。
 回复 引用   
#104楼 2008-03-27 16:13 *o*[未注册用户]
怎么样才可以像你做的弹出一样好看呢?
是要加皮肤?

 回复 引用   
#105楼 2008-04-02 17:42 Kymo[未注册用户]
哪位给解释一下$get(bodyTag)吧,谢谢了
 回复 引用 查看   
#106楼 2008-04-17 16:43 杨彩      
现在才来学习,迟了点@
 回复 引用   
#107楼 2008-04-24 14:25 salangane0512[未注册用户]
真是好东西,谢谢了!
 回复 引用   
#108楼 2008-05-23 11:11 张路[未注册用户]
怎么我一样都试不出来呀 按钮按下去不报错 也无结果显示<Services>那个

我是VS2008 既然集成在内是否不需要另装任何动西支持ajax呀

 回复 引用   
#109楼 2008-05-26 22:14 ying84[未注册用户]
李大哥,问个简单的问题,错误处理小节的代码中的get前面的$符号有什么特殊的含义吗?

function ToggleAlertDiv(visString)
{
if (visString == 'hidden')

{
$get(bodyTag).style.backgroundColor = 'white';
}
else
{
$get(bodyTag).style.backgroundColor = 'gray';

}

var adiv = $get(divElem);

adiv.style.visibility = visString;

}

 回复 引用   
#110楼 2008-06-03 13:48 YanPing[未注册用户]
我这里没有报错
就是点击“调用”的时候没有反应
对话框没有弹出
IE的左下角提示“网页上有错误”

 回复 引用 查看   
#111楼 2008-06-09 19:58 zagelover      
--引用--------------------------------------------------
陈一夫: 第五个例子,老大忘记交代应该先引用命名空间了,目前release版应该是using System.Web.Script.Services;这样才能使用[ScriptService],我试了好多次才找到原因。
--------------------------------------------------------

谢谢,我也是这个问题,搞了好久,呵呵!!!

 回复 引用 查看   
#112楼 2008-06-21 18:07 不死小强      
偶也是初学者,在其出正式版之前,只能自己玩玩,不会用到项目上的。
 回复 引用 查看   
#113楼 2008-06-21 18:23 不死小强      
刚测试了几个项目,真的很爽啊!局部刷新就是不错!呵呵!
收藏了,慢慢学!

 回复 引用 查看   
#114楼[楼主] 2008-06-21 21:26 TerryLee      
@不死小强
这东西出来很久了啊

 回复 引用   
#115楼 2008-07-02 09:58 yangblank[未注册用户]
你好,请问JS里的$get()这个方法是什么意思?有什么作用?谢谢。
 回复 引用 查看   
#116楼[楼主] 2008-07-02 10:02 TerryLee      
@yangblank
$get() == document.getElementById()

 回复 引用   
#117楼 2008-07-03 11:47 Yzr[未注册用户]
请问调用项目外的web服务,怎么用啊?我这里说找不到web服务?
 回复 引用 查看   
#118楼 2008-07-15 12:22 编程的夜猫      
学习!
 回复 引用   
#119楼 2008-07-29 11:06 cychai[未注册用户]
在vs2008 ASP.Net Ajax中,添加的引用为
using System.Web.Script.Services;

不是using Microsoft.Web.Script.Services;

 回复 引用 查看   
#120楼[楼主] 2008-07-30 00:55 TerryLee      
@cychai
在.NET 2.0中也是System.Web.Script.Services,只是这篇写的时候还在Beta版。。。

 回复 引用   
#121楼 2008-08-15 19:29 greate[未注册用户]
分析器错误消息: 在 machine.config 文件之外使用注册为 allowDefinition='MachineOnly' 的节是错误的。
 回复 引用   
#122楼 2008-08-19 09:41 lusee123[未注册用户]
李大哥,好,下面是我照着你写的例子写了一个,但是还是报错!

WebServiceSample.asmx:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;

namespace TerryLeeTest
{
/// <summary>
/// WebServiceSample 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]
public class WebServiceSample : System.Web.Services.WebService
{
public WebServiceSample()
{

}

[WebMethod]
public string HelloWorld()
{
return "Hello World";
}

[WebMethod]
public string EchoString(string s)
{
return "Hello " + s;
}
}
}


WebServiceTest.aspx页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebServiceTest.aspx.cs" Inherits="TerryLeeTest.WebServiceTest" %>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<script type="text/javascript" language="javascript">
function OnbuttonGo_click()
{
requestSimapleService=WebServiceSample.EchoString(document.getElementById("inputName").value,OnRequestComplete);
return false;
}
function OnRequestComplete(result)
{
alert(result);
}
</script>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebServiceSample.asmx"/>
</Services>
</asp:ScriptManager>
<div>
<input type="text" id="inputName" size="20" />
<input id="button" type="button" value="调用" onclick="return OnbuttonGo_click()" />
</div>
</form>
</body>
</html>

他报的是
WebServiceSample对象未定义!!
错误!!

 回复 引用   
#123楼 2008-08-19 11:43 IT达人群[未注册用户]
IT达人群:67761614
 回复 引用 查看   
#124楼[楼主] 2008-08-20 10:17 TerryLee      
@lusee123
还是哪个名称上的错误或者命名空间等问题,你可以再仔细检查一遍看看。。。

 回复 引用   
#125楼 2008-08-22 12:41 VFoxPro[未注册用户]
你好 @TerryLee
使用Ajax后自己再扩展Object的原生类型会导致Sys的错误,不用Ajax 就无此问题。能否变相的解决?


 回复 引用   
#126楼 2008-09-10 17:23 ljf[未注册用户]
好不容易找到这里来了....
学习中

 回复 引用   
#127楼 2008-09-11 14:53 worldfirst[未注册用户]
楼主给的第五节的例子跑不起来呀,报脚本错误,有没有能跑起来的程序呢?
 回复 引用 查看   
#128楼[楼主] 2008-09-17 00:59 TerryLee      
@ljf
欢迎常来:)

 回复 引用 查看   
#129楼[楼主] 2008-09-17 01:00 TerryLee      
@worldfirst
本文是在Beta 1下完成的。

 回复 引用   
#130楼 2008-09-23 11:10 wenzhixing[未注册用户]
--引用--------------------------------------------------
panda: 对于正式版,我来说几句话,给不能通过测试的朋友一些提示。我也搞了很久才搞出来。
<br>
<br>1 [ScriptService]
<br>要添加 using System.Web.Script.Services;
<br>和System.Web.Extensions引用
<br>2
<br>namespace SM
<br>{
<br> [WebService(Namespace = &quot;<a target="_new" href="http://tempuri.org/&quot;">http://tempuri.org/&quot;</a>)]
<br> [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
<br> [ScriptService]
<br> public class AjaxService : System.Web.Services.WebService
<br> {
<br>
<br> [WebMethod]
<br> public string HelloWorld(string name)
<br> {
<br> return name + &quot; Hello World&quot;;
<br> }
<br> }
<br>}
<br>3 js要把命名空间写上,如下
<br> &lt;script type=&quot;text/javascript&quot; language=&quot;JavaScript&quot;&gt;
<br>
<br> function OnbuttonGo_click()
<br> {
<br> SM.AjaxService.HelloWorld(
<br> document.getElementById('inputName').value, //params
<br> OnRequestComplete //Complete event
<br> );
<br>
<br> return false;
<br> }
<br>
<br> function OnRequestComplete(result)
<br> {
<br> alert(result);
<br> }
<br>
<br>&lt;/script&gt;
<br>
--------------------------------------------------------
完全正确!!谢谢!

 回复 引用   
#131楼 2008-11-01 15:24 城市猎人24[未注册用户]
我是新手,请问博主的测试环境,我的是VS2005,安装了ASPAJAXExtSetup.msi,下载你的例子,可是测试不了,问题多多!
 回复 引用 查看   
#132楼[楼主] 2008-11-05 09:45 TerryLee      
@城市猎人24
ASP.NET AJAX 1.0 Beta版的例子,在ASP.NET AJAX 1.0下测试,没问题才怪,呵呵

 回复 引用 查看   
#133楼 2008-11-07 07:57 飘~飘      
--引用--------------------------------------------------
城市猎人24: 我是新手,请问博主的测试环境,我的是VS2005,安装了ASPAJAXExtSetup.msi,下载你的例子,可是测试不了,问题多多!
--------------------------------------------------------
ME 也是2005 基本没问题呀

 回复 引用   
#134楼 2008-12-05 15:56 francis[未注册用户]
requestSimapleService=WebServiceSample.EchoString(document.getElementById("inputName").value,OnRequestComplete);
请问这里的requestSimapleService是什么意思啊,前后都没有用到啊?还有为什么会出现对像不支持属性和方法?


 回复 引用 查看   
#135楼[楼主] 2008-12-08 10:39 TerryLee      
@francis
看看JavaScript的一些基础知识吧,这对于你学习各种AJAX框架有很大的帮助:)

 回复 引用 查看   
#136楼 2008-12-10 12:00 幻蓝      
AJAX.NET开发的页面在加载的时候

是不是会慢的很?

平白页面内容的脚本增加很多。
以前看过几个这样的网站都不是很乐观。

就不想用这技术了。

现在更喜欢JQuerry

 回复 引用 查看   
#137楼[楼主] 2008-12-15 10:17 TerryLee      
@幻蓝
1. AJAX.NET跟ASP.NET AJAX不是同一个东西,不要混淆

2. ASP.NET AJAX其实也没有想象中那么慢,通过HTTP压缩等手段还是可以做到让页面的体积减小

3. jQuery确实是个不错的东西

 回复 引用   
#138楼 2008-12-30 00:25 cazy[未注册用户]
支持,很不错咯!
 回复 引用 查看   
#139楼[楼主] 2009-01-04 11:25 TerryLee      
@cazy
谢谢支持:)

 回复 引用 查看   
#140楼 2009-01-08 13:09 谢小妹      
@youyuan
配置文件一般都会缺少<httpHandlers></httpHandlers> 这一段,

还有就是 <asp:SrciptManager> 控件一定要紧跟在<form>后面

具体配置如下:

......

<!--
通过 <authentication> 节可以配置 ASP.NET 使用的
安全身份验证模式,
以标识传入的用户。
-->
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>

</httpHandlers>


 回复 引用 查看   
#141楼 2009-02-04 13:42 梦想飞翔      
使用了ajax.net后怎么进行页面跳转呢。使用updatepanel控件包含了gridview,在gridview中单击button列,事件里面处理用Response.Redirect("地址")的方法运行时出错。注册脚本到前台也不起作用。网络上面也没有找到答案。不知要做什么设置才行。
 回复 引用   
#142楼 2009-02-13 17:07 Brannie[未注册用户]
122楼我回复你的错误
requestSimapleService=WebServiceSample.EchoString(document.getElementById("inputName").value,OnRequestComplete);
这里出现错误,以为你在建立项目的时候用到了命明空间,所以你必须引用命名空间可以~
正确写法如下:
requestSimapleService=TerryLeeTest.WebServiceSample.EchoString(document.getElementById("inputName").value,OnRequestComplete);

 回复 引用 查看   
#143楼 2009-03-09 16:31 yaunion      
@panda
--引用--------------------------------------------------
Brannie: 122楼我回复你的错误
requestSimapleService=WebServiceSample.EchoString(document.getElementById(&quot;inputName&quot;).value,OnRequestComplete);
这里出现错误,以为你在建立项目的时候用到了命明空间,所以你必须引用命名空间可以~
正确写法如下:
requestSimapleService=TerryLeeTest.WebServiceSample.EchoString(document.getElementById(&quot;inputName&quot;).value,OnRequestComplete);
--------------------------------------------------------
--引用--------------------------------------------------
panda: 对于正式版,我来说几句话,给不能通过测试的朋友一些提示。我也搞了很久才搞出来。
<br>
<br>1 [ScriptService]
<br>要添加 using System.Web.Script.Services;
<br>和System.Web.Extensions引用
<br>2
<br>namespace SM
<br>{
<br> [WebService(Namespace = &quot;<a target="_new" href="http://tempuri.org/&quot;">http://tempuri.org/&quot;</a>)]
<br> [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
<br> [ScriptService]
<br> public class AjaxService : System.Web.Services.WebService
<br> {
<br>
<br> [WebMethod]
<br> public string HelloWorld(string name)
<br> {
<br> return name + &quot; Hello World&quot;;
<br> }
<br> }
<br>}
<br>3 js要把命名空间写上,如下
<br> &lt;script type=&quot;text/javascript&quot; language=&quot;JavaScript&quot;&gt;
<br>
<br> function OnbuttonGo_click()
<br> {
<br> SM.AjaxService.HelloWorld(
<br> document.getElementById('inputName').value, //params
<br> OnRequestComplete //Complete event
<br> );
<br>
<br> return false;
<br> }
<br>
<br> function OnRequestComplete(result)
<br> {
<br> alert(result);
<br> }
<br>
<br>&lt;/script&gt;
<br>
--------------------------------------------------------

我先也报错,就是这里的第三点,要应用命名空间。谢谢了

 回复 引用   
#144楼 2009-03-11 18:20 痞子112[未注册用户]
@Talent_XQ
你的那个问题是你的body标签没有ID。所以没有对象哦
哈哈,仔细一点才可以看清楚

 回复 引用   
#145楼 2009-03-25 19:43 幻想震
TerryLee

請問該如何引用另一個Project中的web Service
我在兩個Project中做了引用
但試了很久,但JavaScript呼叫時仍然報錯
謝謝

 回复 引用   
#146楼 2009-03-27 11:34 can8640[未注册用户]
It's alway wrong if i call the exterior web service, it tell me that
the method 'Helloworld' or the class 'Service1' is not defining.

 回复 引用 查看   
#147楼 2009-04-13 22:37 dark_arthur      
大概的问题就是原来博主的代码里面(beta版)的命名空间都是
Microsoft.Web
基本上现在都是
System.Web
改起来也是千头万绪,我把新建的工程里的webconfig拷贝到下载的工程里编译就通过了

希望对大家有帮助

 回复 引用   
#148楼 2009-04-24 17:26 yurou[未注册用户]
@liaobing
你是怎么解决弹出DIV的,还请指教.

 回复 引用   
#149楼 2009-08-13 00:02 菜鸟先飞[未注册用户]
@hi
遇到这个异常以后继续按F5,交给处理异常的函数处理!

 回复 引用 查看   
#150楼 2009-08-14 09:18 北国雪飘飘      
@beyondme
出异常后按F5 那个提示框就会出来!

 回复 引用 查看   
#151楼 2009-08-14 10:51 北国雪飘飘      
Default3.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="wf.Default3" %>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head id="Head1" runat="server">

<title>Untitled Page</title>

</head>

<script type="text/javascript" language="JavaScript">

function OnbuttonGo_click()

{
requestSimpleService = wf.WebServiceSample.EchoString(

document.getElementById('inputName').value, //params

OnRequestComplete //Complete event

);

return false;
}

function OnRequestComplete(result)

{
alert(result);
}

</script>

<body>

<form id="form1" runat="server">

<asp:ScriptManager ID="ScriptManager1" runat="server">

<Services>

<asp:ServiceReference Path="WebServiceSample.asmx"/>

</Services>

</asp:ScriptManager>

<div>

<input type="text" id="inputName" size="20"/>

<input id="button" type="button" value="调 用" onclick="return OnbuttonGo_click()" /></div>

</form>

</body>

</html>

WebServiceSample.cs

using System;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Web.Script.Services;
namespace wf
{


/// <summary>
///WebServiceSample 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
[ScriptService]

public class WebServiceSample : System.Web.Services.WebService
{

public WebServiceSample()
{

//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}

[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
public string EchoString(String s)
{
return "Hello " + s;
}



}
}
什么地方有错啊??报的是“未能创建类型“WebServiceSample”。
”请大家帮帮忙!

 回复 引用 查看   
#152楼 2009-08-14 19:06 大海__涛      
@YanziMyWife
引用lusee123:李大哥,好,下面是我照着你写的例子写了一个,但是还是报错!
<br/>
<br/>WebServiceSample.asmx:
<br/>
<br/>using System;
<br/>using System.Collections;
<br/>using System.ComponentModel;
<br/>using System.Data;
<br/>using System.Linq;
<br/>using System.Web;
<br/>using System.Web.Services;
<br/>using System.Web.Services.Pro...


 回复 引用 查看   
#153楼 2009-08-23 11:38 gxnnzsg      
学习了!谢谢!
 回复 引用   
#154楼 2009-08-24 17:01 fyymxr[未注册用户]
我也遇到 sys 未定义的问题呀,在代码中没有,但运行时有报错,打开“源代码”看有“Sys.WebForms.PageRequestManager._initialize('ScriptManager1', document.getElementById('form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tUpdatePanel1'], [], [], 90);”
不知道这个起到什么作用,谢谢

 回复 引用   
#155楼 2009-09-11 11:40 hailong[未注册用户]
UpdatePanel 控件里放三个DropDownList控件可以做三级联动么?我做的例子能更新第二级,但是第二级的事件onselectedindexchanged="ddl_pcs_SelectedIndexChanged" 就不执行了。
谢谢TerryLee 的回复。

 回复 引用 查看   
#156楼 2009-12-15 23:51 无有      
感谢博主分享!
 回复 引用 查看   
#157楼 2010-04-28 15:14 mylhei      
没有问题的,要用framework3.5才可以 2.0 没有System.Web.Script.Services;
 回复 引用 查看   
#158楼 2010-06-24 00:17 juwa      
谢谢楼主分享。用了几次,没有仔细看,在楼主这里好好补补
 回复 引用 查看   
#159楼 2010-07-04 18:58 豪侠      
谢谢楼主分享
 回复 引用 查看   
#161楼 2010-12-03 16:14 Susancai      
谢谢楼主!您提供的信息非常有用!谢谢分享! Prodigy adjustable bed


 回复 引用 查看   
#162楼 2011-09-08 15:17 海南.胡勇      
这不是一两句就可以讲完的。
评论共2页: 上一页 1 2