网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.ASP.NET1.0/2.0里用DIV层元素弹出.
.正则学习:组的定义及引用方式.
.ASP.NET底层架构探索之IE6的革新.
.P/Invoke能够在asp.net中使用.
.在ASP.NET Atlas中调用Web Servi.
.GridView中利用隐藏的TemplateFi.
.大数量查询分页显示 微软的解决办.
.AspNetForums的数据层概述.
.ASP.NET生成n位不同的验证码.
.ASP.NET控件开发之"代码紧凑原则".
.用ASP.NET 1.1 新特征防止Script.
.在VS2003中直接用DREAMWEAVER8打.
.让你的.NET应用成为一个灰色盒子.
.ASP.NET构架与安全机制之Http请求.
.在 IIS 中配置 SQL XML 支持.
.将Asp.net页面输出为HTML.
.在DataGrid控件中获取数据项中各.
.在ASP.NET中跟踪和恢复大文件下载.
.通过系统配置来提高ASP.NET应用程.
.老外的.net与mysql存储过程编程.

在ASP.NET Atlas中调用Web Service—直接在ASPX页面上暴露Web Method

发表日期:2006-5-31


作者:Dflying Chen(http://dflying.cnblogs.com/
前面的一系列的文章都是直接调用单独的一个Web Service,而在实际项目开发中,特别是在对现有的项目转换中,把页面中的逻辑再提取到专门的Web Service中往往会带来相当多的工作。Atlas充分考虑到了这一点,允许您将服务器端的public方法加上[WebMethod]属性以允许客户端JavaScript的直接调用。

想允许客户端直接调用定义在ASPX页面中的方法,您需要指定该方法为public,并且添加[WebMethod]属性,例如如下定义在ASPX文件中的服务器端方法:

<script runat="server">
    [WebMethod]
    public int AddInt(int int1, int int2)
    {
        return int1 + int2;
    }
</script>

 

在客户端,Atlas将为您Mashup出一个AddInt的JavaScript方法,存在于一个特殊的命名空间PageMethods中,这样您就可以通过PageMethods.AddInt()调用上面的方法了。
同时,将WebMethod定义到ASPX页面中,您还可以在该方法中访问一切页面上的服务器端控件的值和ViewState,并且整个页面的的生存周期将和传统的ASP.NET页面PostBack一样,诸如Page_Load等方法均会被调用,可以让我们对页面有更强的访问能力。不过这样也带来了性能上的折扣,因为每次调用Web Method的时候都会把页面上的ViewState和控件的值传回给服务器,并且服务器端处理整个页面的生存周期将要比仅仅处理一个纯粹的定义在ASMX中的Web Method要复杂的多。所以这里我推荐尽可能的使用纯粹的Web Service,请参考:在Atlas服务器端实现中推荐使用Web Service而不是Page Method。

下面来看一个实例,首先来定义在ASPX中的WebMethod,可以看到这里不单单求两个数的和,还访问了一个页面上的服务器端TextBox的值:

<script runat="server">
    [WebMethod]
    public string AddInt(int int1, int int2)
    {
        return (int1 + int2).ToString() + string.Format("\r\nAnd the Server TextBox's Text is '{0}'.", tbServer.Text);
    }
</script>

 

然后是页面的ScriptManager,这里无需添加任何引用了: <atlas:ScriptManager ID="scriptManager" runat="server" />
然后两个用来输入加数的input以及用来触发服务器调用的input:

<input id="value1" type="text" value="1" />
<input id="value2" type="text" value="2" />
<input id="btnAdd" type="button" value="Add!" onclick="return btnAdd_onclick()" />
还有一个服务器端TextBox:

<asp:TextBox ID="tbServer" runat="server" Text="Server control"></asp:TextBox>
最后是JavaScript调用,注意PageMethods这个内建的命名空间:

function btnAdd_onclick() {
    PageMethods.AddInt(
        $('value1').value,
        $('value2').value,
        OnComplete
    );
}
function OnComplete(result)
{
    alert(result);
}
浏览器中运行,输入两个加数,然后在Server端的TextBox中输入一些字符,点击Add,可以看到Server端的TextBox的值却是被访问到了:


这是Fiddler截获的网络传输,可以看到ViewState和TextBox都被传回了Server:


该实例程序的源代码可以在此下载:http://www.cnblogs.com/Files/dflying/WebMethodOnPage.zip

上一篇:httpRuntime 一点经验 人气:7269
下一篇:ASP.NET实现匿名访问控制 人气:5696
浏览全部ASP.NET的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐