海妖 发表于 2015-1-18 11:14:32

ASP.NET网页编程之ASP.NET MVC 3晋级至MVC 5.1的遭受:“已增加了具有不异键的项”仓酷云 ...

那做企业软件是不是最好用J2EE?比来将一个项目从ASP.NETMVC3晋级至方才公布的ASP.NETMVC5.1,晋级后发明一个ajax哀求呈现了500毛病,日记中纪录的具体非常信息以下:

System.ArgumentException:已增加了具有不异键的项。(Anitemwiththesamekeyhasalreadybeenadded)在System.Collections.Generic.Dictionary`2.Insert(TKeykey,TValuevalue,Booleanadd)在System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionarybackingStore,Stringprefix,Objectvalue)在System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionarybackingStore,Stringprefix,Objectvalue)在System.Web.Mvc.JsonValueProviderFactory.GetValueProvider(ControllerContextcontrollerContext)在System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider(ControllerContextcontrollerContext)在System.Web.Mvc.ControllerBase.get_ValueProvider()在System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContextcontrollerContext,ParameterDescriptorparameterDescriptor)在System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContextcontrollerContext,ActionDescriptoractionDescriptor)在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass21.<BeginInvokeAction>b__19(AsyncCallbackasyncCallback,ObjectasyncState)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallbackcallback,Objectstate,Int32timeout)在System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallbackcallback,Objectstate,BeginInvokeDelegatebeginDelegate,EndInvokeDelegate`1endDelegate,Objecttag,Int32timeout)在System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContextcontrollerContext,StringactionName,AsyncCallbackcallback,Objectstate)
固然成绩是因为晋级至MVC5.1引发的,但本着“碰到成绩,先嫌疑本人”的准绳,反省了一下代码,居然在js代码中发明了一个存在已久的初级毛病:

varpagingBuider={"PageIndex":1};functionbuildPaging(pageIndex){pagingBuider.pageIndex=pageIndex;$.ajax({data:JSON.stringify(pagingBuider),contentType:application/json;charset=utf-8});}
PageIndex在赋值时写成了pageIndex(第1个字母年夜写P写成了小写p),在js中开首字母小写也是标准写法,事先多是直觉性地写出来的,以是这个初级毛病无可非议。
/*这时候你大概不由要问:为何本人给本人谋事,开首字母用年夜写呢?哎,我也有我的心事,这段js代码是在服务端依据C#对象的属性天生的,C#的标准是开首字母年夜写*/
因为如许一个初级毛病,在ajax哀求时发送给服务真个json字符串酿成了如许:
{"PageIndex":1,"pageIndex":2}这时候找茬的干劲一涌而出,一个年夜年夜的问号出现在长远。。。

为何ASP.NETMVC3能包涵这个毛病,而且失掉准确的值(PageIndex=2),而ASP.NETMVC5.1却不克不及呢?是MVC5.1更松散了仍是气度更局促了?
猎奇心的使令下,实验在ASP.NETMVC的开源代码中一探求竟。


[*]用git签出ASP.NETMVC的源代码——https://git01.codeplex.com/aspnetwebstack
[*]用VS2013翻开办理计划,在办理计划办理器中搜刮到JsonValueProviderFactory
在AddToBackingStore办法中找到了非常的激发点(最初1行代码backingStore.Add(prefix,value)):

privatestaticvoidAddToBackingStore(EntryLimitedDictionarybackingStore,stringprefix,objectvalue){IDictionary<string,object>d=valueasIDictionary<string,object>;if(d!=null前天傍晚我发表了《net网页编程的跨平台就是一句谎言。》,原本就是周末闲来无事,发表一篇略带争议性的博文让大家都来吵吵架,发表自己的看法,根本就没想着谁把谁打倒,一个行业或者是技术阵营是无法用短期口水仗打到对手的。

飘飘悠悠 发表于 2015-1-19 17:51:40

主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。

金色的骷髅 发表于 2015-1-24 15:13:42

但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。

谁可相欹 发表于 2015-2-1 17:29:47

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

小魔女 发表于 2015-2-4 05:54:27

通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。

活着的死人 发表于 2015-2-4 13:10:29

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。

admin 发表于 2015-2-8 09:32:37

由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。

乐观 发表于 2015-2-25 08:23:25

Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。

分手快乐 发表于 2015-2-25 21:49:21

asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!

精灵巫婆 发表于 2015-3-11 15:32:43

提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

冷月葬花魂 发表于 2015-3-18 22:56:31

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

再见西城 发表于 2015-3-26 18:20:52

ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
页: [1]
查看完整版本: ASP.NET网页编程之ASP.NET MVC 3晋级至MVC 5.1的遭受:“已增加了具有不异键的项”仓酷云 ...