今天下了一个.net Ajax开发包,该开发包包括ASP2.0和目前ASP1.1版使用的Ajax,详细地址参见
http://ajax.schwarz-interactive.de/ ,接下来,开工。
1. 新建一个项目,在引用中添加引用Ajax.dll,Ajax.dll位于下载的压缩包里面。
2.建立HttpHandler,在web.config里面加上
<
configuration
>
<
system
.web
>
<
httpHandlers
>
<
add
verb
="POST,GET"
path
="ajax/*.ashx"
type
="Ajax.PageHandlerFactory, Ajax"
/>
</
httpHandlers
>
<
system
.web
>
</
configuration
>
3.新建一个类DemoMethods,这个类实现获取客户端MAC地址:
using
System;
using
System.Web;
namespace
AjaxSample
{ /**/ /// <summary> /// Summary description for Methods. /// </summary> public class DemoMethods { [Ajax.AjaxMethod] public string GetCustomerMac( string clientIP) //这里输入客户端IP,这个函数知识测试用,你也可以写一个其他的简单一点的函数代替 { string mac = "" ; System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName = " nbtstat " ; process.StartInfo.Arguments = " -a " + clientIP; process.StartInfo.UseShellExecute = false ; process.StartInfo.CreateNoWindow = true ; process.StartInfo.RedirectStandardOutput = true ; process.Start(); string output = process.StandardOutput.ReadToEnd(); int length = output.IndexOf( " MAC Address = " ); if (length > 0 ) { mac = output.Substring(length + 14 , 17 ); } process.WaitForExit(); return mac.Replace( " - " , "" ).Trim(); } } }
4.写javascript,新建一个名为default.js文件如下,
function
GetMac() {
var
clientIP
=
"
192.168.0.1
"
; //document.getElementById(
"
Mac
"
).value
=
DemoMethods.GetCustomerMac(clientIP).value alert(DemoMethods.GetCustomerMac(clientIP).value); }
5.在某个Aspx页面放上一个html 的button
在页面上<head>中引用default.js : <script language="javascript" src="default.js"></script>
在INPUT的onclick事件中加上οnclick="javascript:GetMac()"
<INPUT style="Z-INDEX: 101; LEFT: 392px; POSITION: absolute; TOP: 176px" type="button" value="客户端获取IP" οnclick="javascript:GetMac();">
private
void
Page_Load(
object
sender, System.EventArgs e)
{ // 在此处放置用户代码以初始化页面 Ajax.Utility.RegisterTypeForAjax( typeof (AjaxSample.DemoMethods)); }
注意:typeof(AjaxSample.DemoMethods)中,AjaxSample是命名空间,DemoMethods是要包含要调用方法的类,即上面第3步.新建类DemoMethods
7.修改Global.asax的Application_Start事件,设置Ajax的HandlerPath :
protected
void
Application_Start(Object sender, EventArgs e) { Ajax.Utility.HandlerPath
=
"
ajax
"
; }
运行看看效果。是不是没有刷新就在服务器端取到客户端的MAC地址?? 需要注意的是:该版本的.net Ajax需要手工在中Global.asax加上Ajax.Utility.HandlerPath = "ajax"; 配置文件web.config必须加上HttpHandler的配置信息!
该开发包的新版本还没有来得及体验,估计新版本中会方便一些,可能会去掉手动的设置Global.asax的Application_Start事件中加上Ajax.Utility.HandlerPath = "ajax";以及其他麻烦的设置!期待ing……
<script type="text/javascript"> //
</script>
Feedback
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 13:12 by
function GetMac()
{
var clientIP="192.168.0.1";
document.getElementById("Mac").value=DemoMethods.GetCustomerMac(clientIP).value
alert(DemoMethods.GetCustomerMac(clientIP).value);
}
里边的这一行:document.getElementById("Mac")
"Mac"是什么东西的标示?
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 13:15 by
欧,大概懂了,应该是个label之类的冬冬。
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 14:27 by
不错不错
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 14:30 by
你这哪是取得客户端IP?明明是服务端的嘛,你测试了没?
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 14:36 by
default.js中是如何定位客户端IP的,你这里用var clientIP="192.168.0.1";
能行吗?能在外网使用吗?
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 14:49 by
to interMac
是一个input或TextBox,id是Mac,这里我已经注释掉了,可以不用
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 14:53 by
to 冰戈
这个函数知识测试Ajax用,IP你可以输入你自己的IP试试,
你还可以写一个简单一点的函数
[Ajax.AjaxMethod]
public string GetServerTime()
{
return System.DateTime.Now.ToString();
}
在default.js里面加上一个方法:
function JSGetServerTime()
{
alert(NetAjax.WebForm1.GetServerTime().value);
}
在客户端调用JSGetServerTime就可以了,
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 15:11 by
冰戈,这个怎么不是取得客户端的?他服务器端执行nbtstat -a XXX.XXX.XXX.XXX,而这个IP就是客户端的IP,所以取到的肯定是客户端的IP啊。再说这本来就只是一个例子而以,若要真是取客户端IP用这样来做嘛?
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 15:25 by
和使用javascript调用webservice有什么不同……
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 15:28 by
基本原理是使用异步的xmlhttp请求。
当然也可以用javascript调用webservice来实现!
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 15:43 by
呵呵,不好意思,我测试的时候没注意修改clientIP
function GetMac()
{
var clientIP="192.168.0.1";
//document.getElementById("Mac").value=DemoMethods.GetCustomerMac(clientIP).value;
alert(DemoMethods.GetCustomerMac(clientIP).value);
}
所以感觉是错的,后来发现问题所在了,赶紧过来看看,就遭到 風語者·疾風 的质疑,呵呵,不好意思……
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-19 16:49 by
谢谢各位的支持!
如果有好的建议请提出,或者有好的Ajax方面的资料请和我联系!
jrt324@126.com
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-20 11:44 by
我得到的结果是
undefined
是不是必须用.net 2.0?? 我是在1.1下做的测试
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-20 11:47 by
终于成了! 原来我把 value 写成了 Value
一个字符之差!!
看来javascript还需多下功夫学学呢!
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-20 13:07 by
to sunny
可以了吗?
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-20 13:33 by
问:
如果我在后台需要处理页面上一些控件比如:textbox里的数据,你还得从javascript的函数里穿到后台吧
如果直接在后台得,是得不到的
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-20 14:01 by
to 存在所以孤独
当然可以得到的!当你在在服务器端取到textbox的值如
[Ajax.AjaxMethod]
public string GetTextBoxValue()
{
return Text1.text;
}
在default.js里面加上一个方法:
function JSGetText()
{
alert(NetAjax.WebForm1.GetTextBoxValue().value);
}
很简单!
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-20 14:14 by
to:代码乱了,不知道该怎么办!
呵呵,我想你误会的意思了.我的意思是这样:
比如,我一开始用的是有刷新的:
<asp:button id="AddButton" Runat="server" Text="添 加"></asp:button>
.cs里的方法是:
private void Add_Click(object sender, System.EventArgs e)
{
try
{
string name = this.Nametxt.value;
string age = this.Agetxt.value
Model.PerpleInfo Info = new PerpleInfo (name,age);
BLL.Perple.insert(Info );
}
catch(Exception ex)
{
.......
}
}
==============================================
但是用了你的方法,就得这样了:
[Ajax.AjaxMethod()]
public void Add(string name,string age)
{
string name = name;//用string name = this.Name.value行么??
string age = age
.........
}
是不是这样的?你在.cs里想用页面的数据,就得用传递到后台了,对不?
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-20 14:27 by
[Ajax.AjaxMethod()]
public void Add(string name,string age)
{
string name = name;//用string name = this.Name.value行么??-
//用string name = this.Name.value行么??-可以的
string age = age
.........
}
但是我还没有明白你的意思!你想实现什么?能再说清楚一点吗?
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-20 14:36 by
to:代码乱了,不知道该怎么办!
你有msn么:偶的是 zklvy@hotmail.com 在这个上和你说吧
我的意思是,你想执行一个插入操作,当然插入的数据来自页面
你直接用
public void Add()
{
string name = this.Name.value;
//这步不能得到数据name是null
//你自己测试一下就知道了
}
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-09-20 14:53 by
我最近都没有用MSN
我的MSN:jrt324@126.com
QQ:54433048
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-10-18 18:34 by
为什么最后没有值呢?
length=-1
请楼主再告知一下,谢谢了
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2005-10-18 18:42 by
楼主麻烦你解释一下,这几句话的意思!
process.StartInfo.FileName = "nbtstat";
process.StartInfo.Arguments = "-a "+clientIP;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
谢谢了!!!
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2006-04-12 11:14 by
看不懂啊,楼主能不能加点注释,好方便我们这些入门者看。
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2006-04-25 08:41 by
nbtstat 好像只能查一个子网里的
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2006-05-29 16:59 by
你的demo能运行吗?????????????????
按你的步骤做能成功吗——失败???????????
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2007-01-29 13:33 by
document.getElementById("Mac").value=DemoMethods.GetCustomerMac(clientIP).value;
alert(DemoMethods.GetCustomerMac(clientIP).value);
是错误的代码啊 JS里怎么能调用CS里的代码呢
还请指教啊
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2007-04-27 11:06 by
只能获取局域网里的啊,放到服务器就得到的值就为null了
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2007-04-27 21:46 by
@冰凝
是的,我只是作一个演示而已
# re: 初次体验.net Ajax无刷新技术 回复 更多评论 2007-05-08 21:48 by
没有连接成功就会返回空.
6.在page页面的Page_Load事件中加上