冷月葬花魂 发表于 2015-1-16 22:39:26

ASP.NET网站制作之使用ASP.NET 2.0的客户端回调功能制造下...

Java欺骗了我们那么多年,如今的多核时代,我认为它气数已尽!asp.net|客户端|下拉  记得之前做asp的时分,常会碰着下拉框多级联动,好比说在注册的时分,必要选择省和乡村,这就必要二级联动,谁人时分一个广泛的做法就是使用javascript剧本来完成,先把数据从数据库中读掏出来,放到javascript的数组中,鄙人拉框的onchange事务触发时,就能够间接从javascript的数组中读取想要的数据。厥后在asp.net1.0中开辟时,这类办法也通用,但假如要多级的话,有一个很年夜的弱点,就是它必要把数据一次性全体读到javascript的数组中,假如数据十分复杂的话,这部分隔销是很年夜的,偶然候不把数据放到数据中中,而是间接写在javascript中,如许不容易于保护,并且代码也太长,假如要开辟能够无穷级联的话,那更是对照头痛。自从asp,net2.0问世后,入手下手进修新手艺,发明asp,net2.0不但在控件上,功效上都发生了年夜变更,并且在对javascript客户剧本的挪用功效也加倍壮大了,出格是呈现了ajax功效,即客户端回调功效(固然这只是一个小小的ajax功效,假如要完成功效更壮大的无革新可看atlas),使用这个特征能够很便利的开辟现无穷级联动的下拉框效果。
  1、先在数据库里创建响应的数据表以下:

 2、创建读取数据表的函数,这里就不写出来了,我想每一个人城市有分歧的办法往完成这一功效。
3、接上去,我们就能够举行页面设置了,我们先做一个二级联动的效果,在页面上安排二个下拉框控件,下面一个为TestDropDownList,上面一个为Item1,再到场一个objectdatasource控件,用来读取parentId为0的一切纪录绑定到TestDropDownList下拉框中,以下图:

  假如要利用客户端回调,必需要完成System.Web.UI.ICallbackEventHandler接口。
1publicpartialclassTest:System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
2{
  该接口上面,有二个办法:
  a)、voidSystem.Web.UI.ICallbackEventHandler.RaiseCallbackEvent(stringeventArguent)
  该办法吸收客户端传过去的参数enentArguent,这个参数好象只能是string型,而且没有前往值,我们能够依据传过去的参数,来实行响应的功效,在这里我们不克不及对页面举行从头绑定等操纵,但可以跟数据库举行交互操纵,如读取、删除、拔出等操纵,在本文的例子中,这里从客户端传过去的是parentId的值,再从数据库中读取parentId为响应值的一切纪录,详细代码以下:
1voidSystem.Web.UI.ICallbackEventHandler.RaiseCallbackEvent(stringeventArguent)
2{
3DataSetds=newGetData().TestByParentId(Convert.ToInt32(eventArguent));
4foreach(DataRowrowinds.Tables.Rows)
5{
6if(result.Equals(string.Empty))
7{
8result=row["pkId"]+"@"+row["name"].ToString();
9}
10else
11{
12result=result+","+row["pkId"]+"@"+row["name"].ToString();
13}
14}
15}
  在这里,经由过程TestByParentId(Convert.ToInt32(enentArguent))函数读到响应数据,并把失掉的数据作了一些处置,这个为何要如许做,请持续往下看。这里的result为string型变量。
  b)、stringSystem.Web.UI.ICallbackEventHandler.GetCallbackResult()
  这是第二个办法,该办法没有参数,前往只能前往string型。这个办法是用来数据回调的,下面谁人办法吸收客户端传过去的参数,举行处置后,还要把处置后的我们想要的数据传回到客户端往实行,才会有效。这里我们也看到了,因为该办法只能前往string型,而鄙人拉框必需有二个值,一个是DataValue,另外一个是DataText,以是在下面的办法中,经由过程@标记,把这二个值合在一同,便于在客户端程序中举行分别。这个办法功效很复杂,就是把result前往便可,以下:
1stringSystem.Web.UI.ICallbackEventHandler.GetCallbackResult()
2{
3returnresult;
4}
  如今我们完成了System.Web.UI.ICallbackEventHandler接口下的全体办法,接上去我们就能够来写客户真个程序了,用javascript来完成。这里次要也有二个办法,第一个办法用来承受下拉框控件的onchange事务触发呼应,另外一个用来吸收stringSystem.Web.UI.ICallbackEventHandler.GetCallbackResult()办法传送过去的result值,并做响应处置,把数据绑定到第二个下拉框中往,完成二级联动。次要代码以下
  a)、第一个办法
1functionCallServer(input,context)
2{
3context.length=0;
4context.options=newOption("数据读取中","0");
5
6arg=input.value;
7<%=callback%>
8}
  这里有二个参数,input是用来触发onchange的下拉框控件称号,context是要级联的下拉框称号,这里在数据还没有绑定之前,级联下拉框显现“数据读取中...”字样。arg吸收input下拉框的值,这个值今后是传送到下面的eventArguent参数中往,个中的<%=callback%>我们上面再先容。
  b)、第二个办法
1functionReceiveServerData(result,context)
2{
3context.length=0;
4vararrData=result.split(",");
5for(vari=0;i<arrData.length;i++)
6{
7vardata=arrData.split("@");
8context.options=newOption(data,data);
9}
10
11}
  这里也有二个参数,个中result,就是吸收下面讲到的result值,而context同第一个办法的context。这里经由过程js的split办法,把数据举行处置,再绑定到context控件中往,经由过程这个就能够在第二个下拉框中呈现响应的值了。
  做到这里基础上已半途而废了,不外另有最初一步,这也是最主要的一步,我们如今做的只是客户端回客户端,服务器办法回服务器办法,那末怎样把这二个接洽起来呢,这也是完成客户端回调的关头部分,这里必要利用Page.ClientScript.GetCallbackEventReference办法,上面是摘自MSDN2上的对ClientScript.GetCallbackEventReference(……)的具体申明。
publicstringGetCallbackEventReference(Controlcontrol,stringargument,stringclientCallback,stringcontext)
  参数:
参数        感化
control处置客户端回调的服务器Control。该控件必需完成ICallbackEventHandler接口并供应RaiseCallbackEvent办法。
argument从客户端剧本传送一个参数到服务器真个RaiseCallbackEvent办法。
clientCallback一个客户端事务处置程序的称号,该处置程序吸收服务器端事务前往的了局。
context启动回调之前在客户真个客户端剧本信息。剧本的了局传回给客户端事务处置程序。
前往值挪用客户端回调的客户端函数的称号。

  上面是ClientScriptManager.GetCallbackEventReference办法的重载列表

称号申明
ClientScriptManager.GetCallbackEventReference(Control,String,String,String)猎取一个对客户端函数的援用;挪用该函数时,将启动一个对服务器端事务的客户端回调。此重载办法的客户端函数包括指定的控件、参数、客户端剧本和高低文。
ClientScriptManager.GetCallbackEventReference(Control,String,String,String,Boolean)猎取一个对客户端函数的援用;挪用该函数时,将启动一个对服务器端事务的客户端回调。此重载办法的客户端函数包括指定的控件、参数、客户端剧本、高低文和布尔值。
ClientScriptManager.GetCallbackEventReference(Control,String,String,String,String,Boolean)猎取一个对客户端函数的援用;挪用该函数时,将启动一个对服务器端事务的客户端回调。此重载办法的客户端函数包括指定的控件、参数、客户端剧本、高低文、毛病处置程序和布尔值。
ClientScriptManager.GetCallbackEventReference(String,String,String,String,String,Boolean)猎取一个对客户端函数的援用;挪用该函数时,将启动一个对服务器端事务的客户端回调。此重载办法的客户端函数包括指定的方针、参数、客户端剧本、高低文、毛病处置程序和布尔值。
  次要完成以下:
在page_load里到场上面语句
1callback=Page.ClientScript.GetCallbackEventReference(this,"arg","ReceiveServerData","context");
个中,arg就是用来从客户端传送参数,终极传到enentArguent中,ReceiveServerData是一个客户端办法,用来吸收服务器端回调过去的数据。
再把callback这个字符串放在第一个客户端办法上面(请看下面的第一个客户端办法)
这个完成后,我们只需把第一个下拉框的onchange客户端事务到场就能够了,在page_load里到场
1TestDropDownList.Attributes["onchange"]="javascript:CallServer(TestDropDownList,Item1)";
做完一切这些,程序应当可以一般动行了

  如今二级联动已乐成,那怎样可以完成多级的呢,实在人人只需细心的看一下,就不难发明,当我触到一个下拉框的onchange事务,经由过程callServer读取值,再经由过程<%callback%>来启动voidSystem.Web.UI.ICallbackEventHandler.RaiseCallbackEvent(stringeventArguent)这个办法,把数据处置后,经由过程stringSystem.Web.UI.ICallbackEventHandler.GetCallbackResult()办法前往,再由ReceiveServerData客户端来把数据绑定到响应原下拉框中,而这里的二个互动的下拉框都是经由过程参数来传送的,TestDropDownList.Attributes["onchange"]="javascript:CallServer(TestDropDownList,Item1)"; 如许的话,我们能够改动这里传送的控件参数名,就能够反复使用这四个办法,也就是如许就能够完成,无穷级联动。我们再到场一个下拉框,取名Item2,我们只需在page_load中到场以下语句便可:
1Item1.Attributes["onchange"]="javascript:CallServer(Item1,Item2)";
  就就能够三级联动了,假如要四级,五级,只需到场下应的下拉框,并在page_load中到场响应的onchange事务触发,就能够完成了
  不外这类办法今朝另有一个很年夜的二个弱点:
1、那就是当第一个选择后,第二个下拉框会呈现响应的值,而第三个和上面的几个不会变,只要再选择第二个下拉框的值后,第三个才会改动
2、因为1的成绩,招致假如第二个下拉框中只要一个值,那末第三个和以下几个都不克不及产生改动了,不晓得人人有无好的办理办法,我信任应当有办理的办法的。
因为自己程度无限,大概有不妥的地方,但愿人人可以斧正,感谢!
今天去面试,被问到C#中的new关键字,看了那么多的书对new关键字还是有一定认识,回来又把new复习了一遍,发现了许多以前还不知道的细节。

小魔女 发表于 2015-1-19 20:42:11

现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。

小妖女 发表于 2015-1-26 14:14:04

在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?

再见西城 发表于 2015-2-4 15:55:35

ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。

莫相离 发表于 2015-2-10 03:44:00

现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。

乐观 发表于 2015-2-28 18:47:23

大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。

只想知道 发表于 2015-3-10 05:58:49

ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。

爱飞 发表于 2015-3-17 05:06:50

使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

小女巫 发表于 2015-3-23 19:59:07

ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
页: [1]
查看完整版本: ASP.NET网站制作之使用ASP.NET 2.0的客户端回调功效制造下...