ASP.NET AJAX入门系列(3):使用ScriptManagerProxy控件

ASP.NET AJAX中,由于一个ASPX页面上只能有一个ScriptManager控件,所以在有母版页的情况下,如果需要在Master-PageContent-Page中需要引入不同的脚本时,这就需要在Content-page中使用ScriptManagerProxy,而不是ScriptManagerScriptManager ScriptManagerProxy 是两个非常相似的控件。

主要内容

1ScriptManagerProxy控件概述

2.简单示例

 

一.ScriptManagerProxy控件概述

ASP.NET AJAX中,由于一个ASPX页面上只能有一个ScriptManager控件,所以在有Master-Page的情况下,如果需要在Master-PageContent-Page中需要引入不同的脚本时,就需要在Content-page中使用ScriptManagerProxy,而不是ScriptManagerScriptManagerProxyScriptManager是两个非常相似的控件。简单定义形式如下:

<asp:ScriptManagerProxy id="ScriptManagerProxy1" runat="server">

    
<Services>

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

     
</Services>

</asp:ScriptManagerProxy>
在它下面可以添加的子标签有:ServicesScriptsAuthenticationServiceProfileService

二.简单示例

下面看一个简单的使用ScriptManagerProxy的例子。

1.首先我们准备两个WebService,在Master-Page中我们输入一个字符串,而在Content-Page中我们求两个数的和。

SimpleWebService.asmx

[ScriptService]

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

    
public SimpleWebService () {

        
//Uncomment the following line if using designed components 

        
//InitializeComponent(); 

    }


    [WebMethod]

    
public string EchoString(String s)

    
{
        
return "Hello " + s;
    }


}

CalculWebService.asmx

[ScriptService]

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

    
public CalculWebService () {

        
//Uncomment the following line if using designed components 

        
//InitializeComponent(); 

    }



    [WebMethod]

    
public int Add(int a,int b) {

        
return a + b;
    }

}

2.添加一个Master-Page,在它上面添加一个ScriptManager控件,并引入WebService SimpleWebService.asmx,并添加相应的HTML元素:

<div>

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

        
<Services>

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

        
</Services>

    
</asp:ScriptManager>

    
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">

    
</asp:contentplaceholder>

    
&nbsp;<h3>请输入名称:</h3>

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

    
<input id="button" type="button" value="确 定" onclick="return OnbuttonGo_click()" />

</div>

编写相应的JS代码:

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

    
function OnbuttonGo_click() 

    
{
        requestSimpleService 
= SimpleWebService.EchoString(

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

            OnRequestComplete    
//Complete event

            );

        
return false;
    }


    
function OnRequestComplete(result) 

    
{
        alert(result);
    }


</script>

3.添加一个Content-Page,在它上面添加一个ScriptManagerProxy控件,并引入WebService CalculWebService.asmx,并添加相应的HTML元素:

<div>

    
<asp:ScriptManagerProxy id="ScriptManagerProxy1" runat="server">

        
<Services>

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

         
</Services>

    
</asp:ScriptManagerProxy>

    
<h3>请输入两个数:</h3>&nbsp;<input id="inputA" type="text" style="width: 110px" />&nbsp;+&nbsp;

    
<input id="inputB" style="width: 110px" type="text" />&nbsp;

    
<input id="buttonEqual" type="button" value=" = "  onclick="return OnbuttonEqual_click()"/>

</div>

编写相应的JS代码:

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

    
function OnbuttonEqual_click() 
    
{
        requestSimpleService 
= CalculWebService.Add(

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

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

            OnRequestComplete    
//Complete event

            );

        
return false;
    }


    
function OnRequestComplete(result) 

    
{
        alert(result);
    }


</script>
4
.运行后界面如下:

测试Master-Page中的Web Service

测试Content-Page中的Web Service

关于ScriptManagerProxy就介绍到这儿,有个问题就是在我的IDE中为什么ScriptManagerProxy总是提示为未知元素,但运行起来并不抱错,结果也可以出来?
示例代码下载:/Files/Terrylee/ASPNETAJAXScriptManagerProxyDemo.rar

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-10-27 08:31 TerryLee 阅读(25385) 评论(103)  编辑 收藏 网摘 所属分类: [08]  Web开发[07]  AJAX风云

评论共2页: 上一页 1 2 
  回复  引用    
#101楼2006-10-27 09:34 | anikin[未注册用户]
我也没提示未知元素
  回复  引用    
#102楼2006-10-27 09:37 | Ben[匿名][未注册用户]
已查阅.呵呵

想问一下,现在关于AJAX的书籍有那些比较好的.

  回复  引用    
#103楼2006-10-27 10:31 | nestle[匿名]
好,每天支持一下
  回复  引用  查看    
#104楼2006-10-27 10:52 | jailu      
Good good study,Day day up
  回复  引用    
#105楼2006-10-27 11:01 | vagabond
支持一下..学习!!
  回复  引用    
#106楼2006-10-27 11:03 | vagabond
@Terrylee
这篇文章没结合源码吗?

  回复  引用    
#107楼2006-10-27 11:19 | Raysbo[未注册用户]
支持。。。
一直在看你的系列^_^

  回复  引用  查看    
#108楼2006-10-27 13:02 | 舒密      
你好,我在母版页放了ScriptManager控件,在其它页面的ContentPlaceHolder中放一下UpdatePanel总是出现下面的错误

The control with ID 'UpdatePanel1' requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.

说没有找到ScriptManager 请问怎么解决??

  回复  引用  查看    
#109楼2006-10-27 14:01 | aspnetx      
喜欢TerryLee的文章
短小精练
一看就懂

  回复  引用  查看    
#110楼2006-10-27 14:05 | aspnetx      
还有
如果有些地方有必要的话,简单的说一下与之前的atlas的区别吧

  回复  引用    
#111楼2006-10-27 16:17 | 木野狐[匿名]
有没有试过如何在 Content Page 和 Master Page 的 html 元素之间做协同调用?
  回复  引用    
#112楼2006-10-27 16:47 | TheOLD(远古)[未注册用户]
拜读 加油
  回复  引用  查看    
#113楼[楼主]2006-10-27 17:49 | TerryLee      
@阿一
不知道我的为什么总是提示呢-_-

  回复  引用  查看    
#114楼[楼主]2006-10-27 17:50 | TerryLee      
@小庄[匿名]
不用客气,多交流:)

  回复  引用  查看    
#115楼[楼主]2006-10-27 17:51 | TerryLee      
@anikin
看来不是ASP.NET AJAX的问题了,是我个人的问题,唉……

  回复  引用  查看    
#116楼[楼主]2006-10-27 17:56 | TerryLee      
@Ben[匿名]
Atlas之前倒是有基本,改为ASP.NET AJAX之后好像还没有什么书籍,AJAX我不太了解:)

  回复  引用  查看    
#117楼[楼主]2006-10-27 17:58 | TerryLee      
@nestle[匿名]
欢迎……

  回复  引用  查看    
#118楼[楼主]2006-10-27 17:58 | TerryLee      
@jailu
@vagabond
:)

  回复  引用  查看    
#119楼[楼主]2006-10-27 17:59 | TerryLee      
@vagabond
有源码,我晚上回去放上来吧,忘了发了

  回复  引用  查看    
#120楼[楼主]2006-10-27 18:00 | TerryLee      
@Raysbo
谢谢哦:)

  回复  引用  查看    
#121楼[楼主]2006-10-27 18:01 | TerryLee      
@舒密
我回去看一下吧,UpdatePanel还没仔细研究呢

  回复  引用  查看    
#122楼[楼主]2006-10-27 18:02 | TerryLee      
@aspnetx
谢谢你的建议,后面的文章我会注意,关于变化部分Dflying Chen的拥抱变化系列不错,可以看看……

  回复  引用  查看    
#123楼[楼主]2006-10-27 18:03 | TerryLee      
@木野狐[匿名]
没做过测试,呵呵

  回复  引用  查看    
#124楼[楼主]2006-10-27 18:03 | TerryLee      
@TheOLD(远古)
谢谢:)

  回复  引用    
#125楼2006-10-27 23:54 | kiwi[未注册用户]
@vagabond
有源码,我晚上回去放上来吧,忘了发了
期待源碼

  回复  引用    
#126楼2006-10-28 01:08 | Hoodlum[未注册用户]
好东西.谢谢....
  回复  引用    
#127楼2006-10-28 16:05 | minghui227[未注册用户]
我碰到个问题好郁闷,希望大家帮我解决下
我在button的onclick事件中,调用js中的方法它怎么老说我并不包含OnbuttonGo_click()的定义,我太郁闷了?
这是怎么回事?我代码是复制过来测试过的。
谁来拯救下我!!!!!

  回复  引用  查看    
#128楼[楼主]2006-10-28 16:21 | TerryLee      
@Hoodlum
客气:)

@minghui227
把你ASPX页面中的代码贴上来看看那儿有疏忽啊?这样也不知道什么原因

  回复  引用  查看    
#129楼2006-10-28 20:51 | seyon      
@TerryLee
我有个问题问下,以前应用过atlas的项目,要迁移到 ASP.NET AJAX,webconfig里面需要做哪些更改?

  回复  引用    
#130楼2006-10-29 13:45 | lauralxj[未注册用户]
@舒密
我今天也碰到了这个问题,然后解决了,希望能共同学习。
是这样的:
如果主版页面有二个或者更多的ContentPlaceHolder 你把
ScriptManager放到第一个ContentPlaceHolder上面当然要在
<form runat="server">里面 形状如下:
<form runat="server" id="myform">

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

<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
<asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server">
</asp:ContentPlaceHolder>




  回复  引用  查看    
#131楼[楼主]2006-10-29 16:59 | TerryLee      
Atlas中的Web.config:
<?xml version="1.0"?>

<configuration>

    
<configSections>
        
<sectionGroup name="microsoft.web" type="Microsoft.Web.Configuration.MicrosoftWebSectionGroup">
            
<section name="converters" type="Microsoft.Web.Configuration.ConvertersSection" requirePermission="false"/>
            
<section name="webServices" type="Microsoft.Web.Configuration.WebServicesSection" requirePermission="false"/>
            
<section name="authenticationService" type="Microsoft.Web.Configuration.AuthenticationServiceSection" requirePermission="false"/>
            
<section name="profileService" type="Microsoft.Web.Configuration.ProfileServiceSection" requirePermission="false"/>
        
</sectionGroup>
    
</configSections>

    
<microsoft.web>
        
<converters>
            
<add type="Microsoft.Web.Script.Serialization.Converters.DataSetConverter"/>
            
<add type="Microsoft.Web.Script.Serialization.Converters.DataRowConverter"/>
            
<add type="Microsoft.Web.Script.Serialization.Converters.DataTableConverter"/>
        
</converters>
        
<webServices enableBrowserAccess="true"/>

    
</microsoft.web>
    
<appSettings/>
    
<connectionStrings/>
    
<system.web>
        
<pages>
            
<controls>
                
<add namespace="Microsoft.Web.UI" assembly="Microsoft.Web.Atlas" tagPrefix="atlas"/>
                
<add namespace="Microsoft.Web.UI.Controls" assembly="Microsoft.Web.Atlas" tagPrefix="atlas"/>
            
</controls>
        
</pages>

        
<compilation debug="true">
            
<buildProviders>
                
<add extension=".asbx" type="Microsoft.Web.Services.BridgeBuildProvider"/>
            
</buildProviders>
        
</compilation>

        
<httpHandlers>
            
<remove verb="*" path="*.asmx"/>
            
<add verb="*" path="*.asmx" type="Microsoft.Web.Services.ScriptHandlerFactory" validate="false"/>

            
<add verb="*" path="atlasbatchcall.axd" type="Microsoft.Web.Services.MultiRequestHandler" validate="false"/>
            
<add verb="*" path="atlasglob.axd" type="Microsoft.Web.Globalization.GlobalizationHandler" validate="false"/>

            
<add verb="*" path="*.asbx" type="Microsoft.Web.Services.ScriptHandlerFactory" validate="false"/>
        
</httpHandlers>
        
<httpModules>
            
<add name="ScriptModule" type="Microsoft.Web.Services.ScriptModule"/>
            
<add name="BridgeModule" type="Microsoft.Web.Services.BridgeModule"/>
            
<add name="WebResourceCompression" type="Microsoft.Web.Services.WebResourceCompressionModule"/>
        
</httpModules>

    
</system.web>

</configuration>
ASP.NET AJAX中的Web.config:
<?xml version="1.0"?>
<configuration>
    
<configSections>
        
<sectionGroup name="microsoft.web" type="Microsoft.Web.Configuration.MicrosoftWebSectionGroup, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
            
<sectionGroup name="scripting" type="Microsoft.Web.Configuration.ScriptingSectionGroup, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
                
<sectionGroup name="webServices" type="Microsoft.Web.Configuration.ScriptingWebServicesSectionGroup, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
                    
<section name="jsonSerialization" type="Microsoft.Web.Configuration.ScriptingJsonSerializationSection, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false"/>
                    
<section name="profileService" type="Microsoft.Web.Configuration.ScriptingProfileServiceSection, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false"/>
                    
<section name="authenticationService" type="Microsoft.Web.Configuration.ScriptingAuthenticationServiceSection, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false"/>
                
</sectionGroup>
            
</sectionGroup>
        
</sectionGroup>
    
</configSections>

  
<system.web>
        
<pages>
            
<controls>
                
<add tagPrefix="asp" namespace="Microsoft.Web.UI" assembly="Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                
<add tagPrefix="asp" namespace="Microsoft.Web.UI.Controls" assembly="Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            
</controls>
            
<tagMapping>
                
<add tagType="System.Web.UI.WebControls.CompareValidator" mappedTagType="Microsoft.Web.UI.Compatibility.CompareValidator, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                
<add tagType="System.Web.UI.WebControls.CustomValidator" mappedTagType="Microsoft.Web.UI.Compatibility.CustomValidator, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                
<add tagType="System.Web.UI.WebControls.RangeValidator" mappedTagType="Microsoft.Web.UI.Compatibility.RangeValidator, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                
<add tagType="System.Web.UI.WebControls.RegularExpressionValidator" mappedTagType="Microsoft.Web.UI.Compatibility.RegularExpressionValidator, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                
<add tagType="System.Web.UI.WebControls.RequiredFieldValidator" mappedTagType="Microsoft.Web.UI.Compatibility.RequiredFieldValidator, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                
<add tagType="System.Web.UI.WebControls.ValidationSummary" mappedTagType="Microsoft.Web.UI.Compatibility.ValidationSummary, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            
</tagMapping>
        
</pages>

        
<compilation debug="true">
            
<assemblies>
                
<add assembly="Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            
</assemblies>
        
</compilation>
        
<httpHandlers>
            
<remove verb="*" path="*.asmx"/>
            
<add verb="*" path="*.asmx" validate="false" type="Microsoft.Web.Script.Services.ScriptHandlerFactory, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        
</httpHandlers>
        
<httpModules>
            
<add name="WebResourceCompression" type="Microsoft.Web.Handlers.WebResourceCompressionModule, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            
<add name="ScriptModule" type="Microsoft.Web.UI.ScriptModule, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        
</httpModules>
    
</system.web>
    
<microsoft.web>
        
<scripting>
            
<webServices>

            
</webServices>
        
</scripting>
    
</microsoft.web>
    
<system.webServer>
        
<validation validateIntegratedModeConfiguration="false"/>
        
<modules>
            
<add name="ScriptModule" preCondition="integratedMode" type="Microsoft.Web.UI.ScriptModule, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        
</modules>
        
<handlers>
            
<remove name="WebServiceHandlerFactory-ISAPI-2.0"/>
            
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="Microsoft.Web.Script.Services.ScriptHandlerFactory, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        
</handlers>
    
</system.webServer>
</configuration>
可以对比一下

  回复  引用    
#132楼2006-10-29 21:24 | 老桂[未注册用户]
我运行时,在脚本里报找不到webservice的错,为什么呀?
  回复  引用    
#133楼2006-10-29 21:24 | 老桂[未注册用户]
我运行时,在脚本里报找不到webservice的错,为什么呀?
  回复  引用  查看    
#134楼[楼主]2006-10-29 21:56 | TerryLee      
@老桂
看你的WebService有没有加上[ScriptService]特性

  回复  引用  查看    
#135楼2006-11-02 23:30 | 夜风      
@舒密
你的问题我也遇到过,如果 WebService加上[ScriptService]特性
就是路径问题

<asp:ServiceReference Path="~/Ajax/TextWebServie.asmx" />

请注意 webservie 是否和 页面在一个 目录下,否则会出错。
请使用如上格式 试一试

  回复  引用  查看    
#136楼2006-11-03 09:17 | KiddLee      
TerryLee:对于你提出的“有个问题就是在我的IDE中为什么ScriptManagerProxy总是提示为未知元素,但运行起来并不抱错,结果也可以出来”这个问题我是这样想的
对于Content-Page中,没有显示的定义它的Schema或者是DTD文件是什么,而在他所属的MasterPage中定义了MasterPage的DTD文件:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
所以IDE找不到对于ScriptManagerProxy相应的规则,所以就会报出“Element 'ScriptManagerProxy' is not a known element”,但是在运行时因为有MasterPage存在,所以也就可以正常运行了(个人的一点猜测)

  回复  引用  查看    
#137楼[楼主]2006-11-03 09:33 | TerryLee      
@KiddLee
呵呵,不可能在Content-Page中不认识ScriptManagerProxy元素,在有些机器上是正常的:)

  回复  引用    
#138楼2006-11-03 11:45 | kyo[未注册用户]
我有同样的问题
ScriptManagerProxy总是提示为未知元素

  回复  引用  查看    
#139楼[楼主]2006-11-03 21:56 | TerryLee      
@kyo
我现在也不知道什么问题,也没有好的解决方法

  回复  引用    
#140楼2006-11-09 19:02 | 哈哈[匿名][未注册用户]
在AJAX beta2下 模版页好象找不到 samplewebservice.asmx 吗!!
大家有发现吗?

  回复  引用    
#141楼2006-11-10 11:52 | MONO[未注册用户]
看了你写的代码,很容易搞明白。
  回复  引用  查看    
#142楼[楼主]2006-11-12 17:01 | TerryLee      
@哈哈[匿名]
能不能贴一段代码出来看看?

我现在还没有发现这个问题

  回复  引用  查看    
#143楼[楼主]2006-11-12 17:02 | TerryLee      
@MONO
谢谢:)

  回复  引用    
#144楼2006-11-17 11:33 | kejianet[未注册用户]
请教两个问题
1、除了使用WebService调用服务器端的方法之外,还有没有其它的方法可以直接使用javascript来调用服务器端的方法?比如一个页面test.aspx和页面代码文件test.aspx.cs,在代码文件中有一个方法public void Hello(),如何在test.aspx中使用javascript调用Hello()方法?
2、在UpdatePanel中,有button1和button2,代码如下
button1_click(...)
{
Thread.Sleep(3000);
... ...
}

button2_click(...)
{
Thread.Sleep(3000);
... ...
}
点击button1后,在3秒之内点击button2,3秒后button1_click没有继续往下执行,button2_click执行正常。为什么?

  回复  引用  查看    
#145楼[楼主]2006-11-18 18:10 | TerryLee      
@kejianet
1.可使用静态的PageMethod方法

2.第二个问题我就不太清楚了

  回复  引用  查看    
#146楼2006-11-20 10:53 | ColdDog      
下载例子回来,怎么运行之后,页面显示脚本有错呢?“对象不支持此属性和方法”
我用的浏览器是ie,有问题?

  回复  引用  查看    
#147楼[楼主]2006-11-20 12:43 | TerryLee      
@ColdDog
写这个例子的时候是Beta1

  回复  引用    
#148楼2006-11-20 13:26 | ColdDog[匿名]
@TerryLee
谢谢提醒,我现在知道怎么改正了
我发现Beta1和Beta2的web.config有一个地方不一样,其中都有<httpHandlers>...</httpHandlers>这么一块,但在Beta1和Beta2中,其中的内容不完全一样:
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="Microsoft.Web.Script.Services.ScriptHandlerFactory, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="GET" path="ScriptResource.axd" type="Microsoft.Web.Handlers.ScriptResourceHandler" validate="false"/>
</httpHandlers>
这个是Beta2的,但在Beta1中,并没有<add verb="GET" path="ScriptResource.axd" type="Microsoft.Web.Handlers.ScriptResourceHandler" validate="false"/>
这一段(你提供下载的例子中也没有这么一段),所以在Beta2环境中运行会报脚本出错,不知道是不是我没有看清您的例子...
现在我把Beta2的web.config完全过去,运行正常:)

  回复  引用    
#149楼2006-11-20 13:29 | ColdDog[匿名]
忘了一个地方,web.config中还有这么一个地方不一样:
<handlers>
<remove name="WebServiceHandlerFactory-ISAPI-2.0"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="Microsoft.Web.Script.Services.ScriptHandlerFactory, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="ScriptResource" verb="GET" path="ScriptResource.axd" type="Microsoft.Web.Handlers.ScriptResourceHandler"/>
</handlers>
Beta1中也是没有以下内容:<add name="ScriptResource" verb="GET" path="ScriptResource.axd" type="Microsoft.Web.Handlers.ScriptResourceHandler"/>

可能你们早知道了,呵呵,但我这个初学者第一次发现,所以见丑了:)

  回复  引用  查看    
#150楼2006-11-20 13:37 | ColdDog      
TerryLee,还有一个问题啊:Asp.net2.0中的异步页功能,也能实现页面不刷新,但我不知道它有什么性能上的不足吗,或者说,它和Ajax比起来,有什么不一样的地方呢?以下链接是我看到的一个例子http://blog.csdn.net/sunscz/archive/2006/05/12/726017.aspx">http://blog.csdn.net/sunscz/archive/2006/05/12/726017.aspx
  回复  引用    
#151楼2006-11-20 19:21 | yyww[匿名][未注册用户]
异步页效果差不多,但是内部实现上比AJax多几次round-trip,性能上不如Ajax
  回复  引用    
#152楼2006-12-04 11:01 | somelock[未注册用户]
能不能这源码发给我一份,我这里不能从网上下载
somelock@163.com谢谢。

  回复  引用    
#153楼2006-12-12 11:33 | 老阿伯[未注册用户]
我的也会报错,但我把Web.config换了个就没错了


  回复  引用  查看    
#154楼2006-12-18 16:54 | Anthan      
@夜风
我在RC版本下还是遇到此问题啊。WebService路径没有问题,[ScriptService]也添加上了,只是命名空间和以前得不太一样,是System.Web.Script.Services;
你如果有空得话在RC版本下调试一下该例子,指点一下小弟哈。多谢
我是以application得方式Demo的,但是以WebSite的方式的话是没有问题的。
真是困惑啊...

  回复  引用  查看    
#155楼2006-12-19 10:50 | Anthan      
我在RC版本下以application得方式Demo结果MasterPage的调用可以,ContentPage的调用就提示找不到CalculWebService。
另外,如果我给WebService加上命名空间,并且在Aspx中引入该命名空间,但是调用还是找不到相应的WebService.
高手指点一二啊。甚是困惑
◎TerryLee,我给你的163信箱发了封邮件哈,有空看看噢

  回复  引用    
#156楼2006-12-30 11:36 | 小白[匿名][未注册用户]

ServiceReference sr = new ServiceReference(); ServiceReference 这个是红色,好像是VS不认识他,可是编译又没有错,而且写ServiceReference 的时候VS都没有智能提示,鼠标放在上面提示con't resolve symbol 'ServiceReference '

  回复  引用    
#157楼2007-02-08 17:33 | jwj[未注册用户]
我的也提示错误,在运行时不报错;该如何解决?
  回复  引用  查看    
#158楼2007-02-24 07:52 | 若寒      
用服务器控件TextBox做时,Id是TextBox1的变成了:
gf = EmployeesService.EmployeeDetails(document.getElementById("ctl00_ContentPlaceHolder1_TextBox1").value,OnRequestComplete);
花了N久才搞明白!

,可以通过“恢复上次EmployeesService.EmployeeDetails(document.getElementById("ctl00_ContentPlaceHolder1_TextBox1").value,OnRequestComplete);
花了N久才搞明白!

  回复  引用    
#160楼2007-03-01 23:55 | 4745156415641[未注册用户]
21561456000236526+56103EmployeesService.EmployeeDetails(document.getElementById("ctl00_ContentPlaceHolder1_TextBox1").value,OnRequestComplete);
花了N久才搞明白!

  回复  引用    
#161楼2007-03-01 23:56 | 容[未注册用户]

  回复  引用    
#162楼2007-03-02 17:23 | 黄毅.net[未注册用户]
我们天津的大哥,佩服,,总是给小弟们先行军...
  回复  引用    
#163楼2007-03-06 18:20 | andy[未注册用户]
我的頁面也是:ScriptManagerProxy提示'項目不是已知項目',但是編譯通過,運行正常。這個問題怎么解釋?期待中!!
  回复  引用    
#164楼2007-03-14 12:37 | ryan[未注册用户]
我遇到 SimpleWebService未定义 问题~
检查了axd 在IIS中注册
我的 msn 是blueguitarsolo@hotmail.com
Lee 如何解决 未定义的问题

  回复  引用    
#165楼2007-03-29 23:43 | 小芒果先生[未注册用户]
我测试了一下,出了一个这样的问题:
步鄹如下:
1. 一母版页Parent.master。
2. 再创建了一个它的子母模版Childer.master.。
3.创建一页面TestAjaxAndNestedMaster.aspx页面,继承自子母模版Childer.master。
4.在第3步中创建的aspx页面中加入内容如下:
(特此声明:在Parent.master和Childer.master我都没用任何Ajax控件。)
<asp:Content id="Content1" ContentPlaceholderID="Content1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:Label runat="server" id="Label1"
text="Child label1" font-bold="true" />
<br>
<asp:Label id="lbl_ShowInfo" runat="server" Text="1"></asp:Label>
<asp:UpdatePanel id="UpdatePanel1" runat="server">
<contenttemplate>
<asp:Button ID="Button1" OnClick="Button1_Click"
runat="server" Text="Button" />&nbsp;
</contenttemplate>
<triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click"></asp:AsyncPostBackTrigger>
</triggers>
</asp:UpdatePanel>
</asp:Content>

其中写在后台代码的的按钮点击事件是:
protected void Button1_Click(object sender, EventArgs e)
{
this.lbl_ShowInfo.Text = (Int32.Parse(this.lbl_ShowInfo.Text) + 1).ToString();
}

5.最后运行,点击按钮,无效。。。。
如果去掉UpdatePanel 控件,则点击事件生效。

难道在嵌套母模板中使用UpdatePanel无效。

  回复  引用    
#166楼2007-04-03 14:57 | zhxmrpig[未注册用户]
小芒果先生
我的情况和你的一样,,你解决了吗

  回复  引用    
#167楼2007-04-10 14:02 | LY[未注册用户]
我的在VS2005下调试总是提示脚本错误。。还没入门,继续努力。
  回复  引用    
#168楼2007-04-11 03:47 | ddafei[未注册用户]
终于找到一个比较容易看得懂的教程了,谢了.天天来光顾!
  回复  引用    
#169楼2007-06-21 09:42 | qingyun163[未注册用户]
我也是,提示未知元素
  回复  引用    
#170楼2007-09-12 10:20 | soa[未注册用户]
问一个关于问题
在调用web service中,如果我的web service是用java开发的,而不是用.net开发的
<asp:ServiceReference Path="CalculWebService.asmx" />
上面的这个部分改怎么写呢?

初学者,望指教

谢谢

  回复  引用    
#171楼2007-11-24 02:30 | dooo[未注册用户]
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="../dooo_WebService.asmx" />
</Services>
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList id="ddlProvince" runat="server">
</asp:DropDownList> <asp:DropDownList id="ddlCity" runat="server">
</asp:DropDownList> <asp:DropDownList id="ddlVilliage" runat="server">
</asp:DropDownList> <ajax:CascadingDropDown id="CascadingDropDown2" runat="server" LoadingText="省份加载中..." PromptText="请选择省份" Category="Province" ServiceMethod="GetProvinceContents" ServicePath="../dooo_WebService.asmx" TargetControlID="ddlProvince">
</ajax:CascadingDropDown> <ajax:CascadingDropDown id="CascadingDropDown1" runat="server" LoadingText="城市加载中..." PromptText="请选择城市" Category="City" ServiceMethod="GetCityContents" ServicePath="../dooo_WebService.asmx" TargetControlID="ddlCity" ParentControlID="ddlProvince">
</ajax:CascadingDropDown> <ajax:CascadingDropDown id="CascadingDropDown3" runat="server" LoadingText="区县加载中..." PromptText="请选择区县" Category="Villiage" ServiceMethod="GetViliageContents" ServicePath="../dooo_WebService.asmx" TargetControlID="ddlVilliage" ParentControlID="ddlCity">
</ajax:CascadingDropDown><span class="red">&nbsp;*</span>
</ContentTemplate>
</asp:UpdatePanel>

  回复  引用    
#172楼2007-11-24 02:35 | dooo[未注册用户]
dooo_WebService.cs 这么调用

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;

using System.Web.Script.Services;
using System.Collections.Generic;
using System.Collections.Specialized;
using AjaxControlToolkit;
using System.Data.SqlClient;
using System.Data;


/// <summary>
/// dooo_WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]

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

public dooo_WebService () {

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



////////////////////////////////////
[WebMethod]
public CascadingDropDownNameValue[] GetProvinceContents(string knownCategoryValues, string category)
{
.....
}
/// <summary>
/// 获取市数据
/// </summary>
/// <param name="knownCategoryValues"></param>
/// <param name="category"></param>
/// <returns></returns>
[WebMethod]
public CascadingDropDownNameValue[] GetCityContents(string knownCategoryValues, string category)
{
........
}
/// <summary>
/// 获取乡镇数据
/// </summary>
/// <param name="knownCategoryValues"></param>
/// <param name="category"></param>
/// <returns></returns>
[WebMethod]
public CascadingDropDownNameValue[] GetViliageContents(string knownCategoryValues, string category)
{
...........
}


  回复  引用    
#173楼2007-11-24 02:40 | dooo[未注册用户]
<%@ WebService Language="C#" CodeBehind="~/App_Code/dooo_WebService.cs" Class="dooo_WebService" %>


dooo_WebService.asmx 文件

运行出现 'Sys' 为定义 脚本错误,用了materPage / ContentPage
请问如何解决??

  回复  引用    
#174楼2007-11-24 02:43 | dooo[未注册用户]
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="../dooo_WebService.asmx" />
</Services>
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList id="ddlProvince" runat="server">
</asp:DropDownList> <asp:DropDownList id="ddlCity" runat="server">
</asp:DropDownList> <asp:DropDownList id="ddlVilliage" runat="server">
</asp:DropDownList> <ajax:CascadingDropDown id="CascadingDropDown2" runat="server" LoadingText="省份加载中..." PromptText="请选择省份" Category="Province" ServiceMethod="GetProvinceContents" ServicePath="../dooo_WebService.asmx" TargetControlID="ddlProvince">
</ajax:CascadingDropDown> <ajax:CascadingDropDown id="CascadingDropDown1" runat="server" LoadingText="城市加载中..." PromptText="请选择城市" Category="City" ServiceMethod="GetCityContents" ServicePath="../dooo_WebService.asmx" TargetControlID="ddlCity" ParentControlID="ddlProvince">
</ajax:CascadingDropDown> <ajax:CascadingDropDown id="CascadingDropDown3" runat="server" LoadingText="区县加载中..." PromptText="请选择区县" Category="Villiage" ServiceMethod="GetViliageContents" ServicePath="../dooo_WebService.asmx" TargetControlID="ddlVilliage" ParentControlID="ddlCity">
</ajax:CascadingDropDown><span class="red">&nbsp;*</span>
</ContentTemplate>
</asp:UpdatePanel>

==================================================
dooo_WebService.cs 这么调用

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;

using System.Web.Script.Services;
using System.Collections.Generic;
using System.Collections.Specialized;
using AjaxControlToolkit;
using System.Data.SqlClient;
using System.Data;


/// <summary>
/// dooo_WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]

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

public dooo_WebService () {

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



////////////////////////////////////
[WebMethod]
public CascadingDropDownNameValue[] GetProvinceContents(string knownCategoryValues, string category)
{
.....
}
/// <summary>
/// 获取市数据
/// </summary>
/// <param name="knownCategoryValues"></param>
/// <param name="category"></param>
/// <returns></returns>
[WebMethod]
public CascadingDropDownNameValue[] GetCityContents(string knownCategoryValues, string category)
{
........
}
/// <summary>
/// 获取乡镇数据
/// </summary>
/// <param name="knownCategoryValues"></param>
/// <param name="category"></param>
/// <returns></returns>
[WebMethod]
public CascadingDropDownNameValue[] GetViliageContents(string knownCategoryValues, string category)
{
...........
}

==================================================

<%@ WebService Language="C#" CodeBehind="~/App_Code/dooo_WebService.cs" Class="dooo_WebService" %>


dooo_WebService.asmx 文件

运行出现 'Sys' 为定义 脚本错误,用了materPage / ContentPage
请问如何解决??


<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
CodeFile="index.aspx.cs" Inherits="index" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">

<script language="javascript" type="text/javascript">
function OnbuttonEqual_click()
{
requestSimpleService=CalculWebService.Add(document.getElementById('inputA').value,document.getElementById('inputB').value,OnRequestComplete);
return false;
}
function OnRequestComplete(result)
{
alert(result);
}
</script>

<div>
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
<Services>
<asp:ServiceReference Path="CalculWebService.asmx" />
</Services>
</asp:ScriptManagerProxy>
<h3>
请输入两个数:</h3>
&nbsp;<input id="inputA" type="text" style="width: 110px" />&nbsp;+&nbsp;
<input id="inputB" style="width: 110px" type="text" />&nbsp;
<input id="buttonEqual" type="button" value=" = " onclick="return OnbuttonEqual_click()" />
</div>
</asp:Content>

  回复  引用    
#176楼2008-03-18 16:20 | sad[未注册用户]
我按照上面事例做怎么出现了Stack overflow at line
  回复  引用  查看    
#177楼[楼主]2008-03-18 18:38 | TerryLee      
@sad
这个示例当时是在Beta1下测试的

  回复  引用    
#178楼2008-04-22 20:05 | DomeA[未注册用户]
郁闷,还是脚本报错webservice未定义,按楼上说的,该了Path路径,服务上有[ScriptService],方法也是静态的,可就是不对,大虾帮帮小弟吧
  回复  引用    
#179楼2008-06-24 10:32 | 方方郏[未注册用户]
@方:
把ScriptManage控件放到最上面就好了

  回复  引用    
#180楼2008-06-25 10:42 | CaiNiao+cainiao[未注册用户]
[ScriptService]

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

public SimpleWebService()
{

//Uncomment the following line if using designed components

//InitializeComponent();

}

[WebMethod]

public string EchoString(String s)
{
return "Hello " + s;
}

}

错误: 找不到类型或命名空间名称“ScriptService”(是否缺少 using 指令或程序集引用?) C:\Documents and Settings\Administrator\桌面\NewViewWork\Ajax And DbXml\StudyAjax\WebSerices\SimpleWebService.asmx 11 2 C:\...\StudyAjax\
难道我的

  回复  引用    
#181楼2008-06-25 10:54 | Hating ML[未注册用户]
在Vs2005里面你上面的有以下错误:
1.Debug ,在Web Service页面老报“找不到类型命名空间的"[ScriptService]"”,
2.直接浏览,Js报错说
requestSimpleService = WebServiceSample.EchoString(

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

OnRequestComplete //Complete event

);
中WebServiceSample 未定义。
怎么回事?
解铃还需系领人!
Help!

  回复  引用  查看    
#182楼2008-07-15 12:36 | 编程的夜猫      
好文章,继续学习ing
  回复  引用    
#183楼2008-07-29 14:03 | cychai[未注册用户]
@老桂
我在vs2008中同样出现说WebServiceSample 未定义

  回复  引用    
#184楼2008-07-29 14:06 | cychai[未注册用户]
@Hating ML
在Web Service页面老报“找不到类型命名空间的"[ScriptService]"”,的错误,

是因为你没有添加引用:
在上面写上 using System.Web.Script.Services;

  回复  引用  查看    
#185楼2008-08-22 09:25 | 杨萍萍      
我是初学者,请教个问题。我用的是VB的语言不是C#的,在WebService页面中怎么加入[ScriptService]特性 啊?

  回复  引用    
#186楼2008-11-26 21:45 | wyux6868[未注册用户]
看你写的东西就是一种享受,如果只有十分的感谢,也得给20分。
  回复  引用  查看    
#187楼[楼主]2008-12-01 00:01 | TerryLee      
@wyux6868
谢谢:)

  回复  引用  查看    
#188楼2009-03-09 16:29 | min10      
呵呵,我引用一下吧!谢谢楼主
  回复  引用    
#189楼2009-05-26 16:18 | 小才爱学习
今天刚看就喜欢上你写的文章了!
请问ajax和EXT的关系。
等答复........

评论共2页: 上一页 1 2 



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 541413





相关文章:

相关链接: