仓酷云

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

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

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:14:32 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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

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

x
那做企业软件是不是最好用J2EE?比来将一个项目从ASP.NETMVC3晋级至方才公布的ASP.NETMVC5.1,晋级后发明一个ajax哀求呈现了500毛病,日记中纪录的具体非常信息以下:
  1. 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[TResult](AsyncCallbackcallback,Objectstate,BeginInvokeDelegatebeginDelegate,EndInvokeDelegate`1endDelegate,Objecttag,Int32timeout)在System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContextcontrollerContext,StringactionName,AsyncCallbackcallback,Objectstate)
复制代码

固然成绩是因为晋级至MVC5.1引发的,但本着“碰到成绩,先嫌疑本人”的准绳,反省了一下代码,居然在js代码中发明了一个存在已久的初级毛病:
  1. 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字符串酿成了如许:
  1. {"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)):
  1. privatestaticvoidAddToBackingStore(EntryLimitedDictionarybackingStore,stringprefix,objectvalue){IDictionary<string,object>d=valueasIDictionary<string,object>;if(d!=null
复制代码
前天傍晚我发表了《net网页编程的跨平台就是一句谎言。》,原本就是周末闲来无事,发表一篇略带争议性的博文让大家都来吵吵架,发表自己的看法,根本就没想着谁把谁打倒,一个行业或者是技术阵营是无法用短期口水仗打到对手的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-18 15:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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