仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 679|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之怎样使用ASP.NET MVC保留电子商务网站用...

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:20:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
计算机发展到这个时候,很多技术日益成熟,想学好一种技术都是不容易的,当你学会用的时候你对它的很多原理可能很不了解)<p>电子商务网站付出功效页面常常会有良多信息,关于这些信息的保留,常常是分步完成的,那末利用Ajax最符合不外了,好比个中的收货人信息模块。这些信息的新建和编纂保留都是用Ajax来完成的。那末有几种体例完成这个操纵呢,我想到以下几种。
先来看看该功效的截图:

一样平常情形下这些信息会对应一个实体类,就定名为:ReceiverInfo,复杂起见,我界说ReceiverInfo以下:

1、将必要的值拼接成json文本,再Action内里处置
起首您必要将要保留的值拼接成一个json文本,相似:
  1. vartest="{ReceiverId:5,ReceiverName:"will",Sex:"F",CreateDate:"2011-02-21"}";
复制代码
然后用Jquery保留到数据库,代码以下:
  1. $.ajax({url:"/Home/test1",type:"post",cache:false,data:test});
复制代码
然后您在Action内里如许操纵:
  1. StreamReaderreader=newStreamReader(Request.InputStream);stringbodyText=reader.ReadToEnd();JavaScriptSerializerjs=newJavaScriptSerializer();ReceiverInforeceiver=js.Deserialize<ReceiverInfo>(bodyText);//保留。。。
复制代码
2、使用自界说的ModelBinder完成
JsonBinder
  1. publicclassJsonBinder<T>:IModelBinder{publicobjectBindModel(ControllerContextcontrollerContext,ModelBindingContextbindingContext){StreamReaderreader=newStreamReader(controllerContext.HttpContext.Request.InputStream);stringjson=reader.ReadToEnd();if(string.IsNullOrEmpty(json))returnjson;JavaScriptSerializerserializer=newJavaScriptSerializer();objectjsonData=serializer.DeserializeObject(json);returnserializer.Deserialize<T>(json);}}
复制代码
我们承继IModelBinder接口,完成其办法:
  1. publicobjectBindModel(ControllerContextcontrollerContext,ModelBindingContextbindingContext)
复制代码
便可。我们能够在Action内里如许利用:
  1. publicActionResultTest1([ModelBinder(typeof(JsonBinder<ReceiverInfo>))]ReceiverInforeceiverInfo)
复制代码
如许我们自界说的IModelBinder就会代替DefaultModelBinder完成数据绑定。
3、间接传送一个Json工具
下面两种办法并没有益用MVC的System.ComponentModel.DataAnnotations举行无效的数据考证。您大概必要本人手动考证,无疑增添了事情量。
我们尝尝这类体例。
前真个写法
  1. varb={ReceiverId:5,ReceiverName:"will",Sex:"F",CreateDate:"2011-02-21"};$.ajax({url:"/Home/test1",type:"post",cache:false,data:b,success:function(data){alert(data.message);},error:function(xhr,a,b){alert(xhr.responseText);}});
复制代码
Action的写法:
  1. publicActionResultTest1(ReceiverInforeceiverInfo)
复制代码
我们能一般的失掉绑定后的数据。并且我们还能使用System.ComponentModel.DataAnnotations举行数据考证。我们为ReceiverInfo做以下修改:
  1. [System.ComponentModel.DataAnnotations.Required(ErrorMessage="收货人必需填写")]publicstringReceiverName{get;set;}
复制代码
并在前端为ReceiverName赋值为空字符串,再次实行,失掉提醒:

很好,不外我们有新的请求了,那就是传送更庞大的工具,好比工具套嵌工具,工具有汇合属性,这类体例不克不及胜任了。
4、使用MvcFutures的JsonValueProviderFactory
每版的MVC都有一个MvcFutures,内里会有一些分外的功效,这些功效有些会到场下一个版本中,而这些功效在某些时分很有效处。我检察了内里的类,发明有一个类JsonValueProviderFactory恰是处置庞大工具的提交和数据考证。因为json工具必要特定剖析才干利用默许的DefaultModelBinder,而这个剖析历程必要在ValueProvider阶段完成,以是必要完成特定的ValueProvider给DefaultModelBinder。我们必要完成一个ValueProviderFactory和IValueProvider,而MVC内里的DictionaryValueProvider<TValue>(承继了IValueProvider)已充足利用了,以是只必要承继ValueProviderFactory完成其办法:publicoverrideIValueProviderGetValueProvider(ControllerContextcontrollerContext)便可,详细代码您能够看JsonValueProviderFactory。
我们界说另外一个类:
ReceiverInfoChild
  1. publicclassReceiverInfoChild{[System.ComponentModel.DataAnnotations.Required(ErrorMessage="ChildId必需填写")]publicstringChildId{get;set;}}
复制代码
并为类ReceiverInfo增添一个属性publicList<ReceiverInfoChild>ReceiverInfoChild{get;set;}
我们把JsonValueProviderFactory拿出来放在项目内里,然后在Global.asax内里注册一下,就能够利用了。
  1. $.ajax({url:"/Home/test1",type:"post",cache:false,data:test});0
复制代码
由于JsonValueProviderFactory中有:if(!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json",StringComparison.OrdinalIgnoreCase))来判别出去的哀求是否是json工具,以是我们提交数据的时分必要如许写:
  1. $.ajax({url:"/Home/test1",type:"post",cache:false,data:test});1
复制代码
个中JSON.stringify(ReceiverInfo)是将json工具转换成字符串,您能够到这里下载该类库。
在Action内里,我们如许写就能够了:
  1. $.ajax({url:"/Home/test1",type:"post",cache:false,data:test});2
复制代码
看一下调试的了局:

完整一般绑定了值。我们再看看数据考证:


至此,我们实行了四种计划:
第一种计划,最贫苦,并且简单堕落(大概跟我团体不喜好拼接字符串有干系);
第二种计划,有必定的通用性,可是倒霉于数据考证;
第三种计划,通用,能够举行无效的数据考证,应对一样平常的需求够用了,可是处置更庞大的工具不可;
第四种计划,几近能够处置我们碰到的一切情形
别的,这是在ASP.NETMVC2中的利用,到了ASP.NETMVC3,微软已把JsonValueProviderFactory作为内置的功效了。
原文链接:http://www.ckuyun.com/WillMeng/archive/2011/03/01/json_binding_validate.html
【编纂保举】
来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!
海妖 该用户已被删除
沙发
发表于 2015-1-18 12:01:50 | 只看该作者
众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-1-21 21:40:13 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
飘飘悠悠 该用户已被删除
地板
发表于 2015-1-30 22:43:49 | 只看该作者
能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。
不帅 该用户已被删除
5#
发表于 2015-2-6 16:30:13 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
蒙在股里 该用户已被删除
6#
 楼主| 发表于 2015-2-17 07:36:18 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
兰色精灵 该用户已被删除
7#
发表于 2015-3-5 17:23:02 | 只看该作者
我的意思是.net好用,从功能上来说比JAVA强还是很明显的。
简单生活 该用户已被删除
8#
发表于 2015-3-19 20:59:28 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:22

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表