⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 方法.txt

📁 net Ajax无刷新技术的使用说明 及 相关的动态数据库。
💻 TXT
字号:
初次体验.net Ajax无刷新技术 
Posted on 2005-09-19 12:46 代码乱了 阅读(3450) 评论(27)  编辑 收藏 引用 网摘 所属分类: c#技术 、.net新技术 、javaScript相关  
早就听说Ajax技术了,传说中是一种很牛的东西,号称无刷新,其实是在web上通过javascript,使用异步的xmlhttp请求,实现无刷新的web界面。可惜一直没有体验过, 先后听做PHP的朋友用过PHP的Ajax开发包,而且做了很多很酷的东西,使小生羡慕不已。 
      今天下了一个.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事件中加上onclick="javascript:GetMac()"

<INPUT style="Z-INDEX: 101; LEFT: 392px; POSITION: absolute; TOP: 176px" type="button"

    value="客户端获取IP" onclick="javascript:GetMac();">


6.在page页面的Page_Load事件中加上


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……


 

Feedback
# re: 初次体验.net Ajax无刷新技术  回复  更多评论    
2005-09-19 13:12 by InterMa 的 Blog 
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 InterMa 的 Blog 
欧,大概懂了,应该是个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 Magicloud 
和使用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 sunny 
我得到的结果是 

undefined 

是不是必须用.net 2.0?? 我是在1.1下做的测试
# re: 初次体验.net Ajax无刷新技术  回复  更多评论    
2005-09-20 11:47 by sunny 
终于成了! 原来我把 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 love_asp_net 
为什么最后没有值呢? 
length=-1 
请楼主再告知一下,谢谢了
# re: 初次体验.net Ajax无刷新技术  回复  更多评论    
2005-10-18 18:42 by love_asp_net 
楼主麻烦你解释一下,这几句话的意思! 
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 xpc 
nbtstat 好像只能查一个子网里的 

# re: 初次体验.net Ajax无刷新技术  回复  更多评论    
2006-05-29 16:59 by hrf_dotnet 
你的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里的代码呢 
还请指教啊

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -