ASP.NET MVC 3升级至MVC 5.1的遭遇:“已添加了具有相同键的项”

最近将一个项目从ASP.NET MVC 3升级至刚刚发布的ASP.NET MVC 5.1,升级后发现一个ajax请求出现了500错误,日志中记录的详细异常信息如下:

System.ArgumentException: 已添加了具有相同键的项。(An item with the same key has already been added)
   在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   在 System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary backingStore, String prefix, Object value)
   在 System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary backingStore, String prefix, Object value)
   在 System.Web.Mvc.JsonValueProviderFactory.GetValueProvider(ControllerContext controllerContext)
   在 System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider(ControllerContext controllerContext)
   在 System.Web.Mvc.ControllerBase.get_ValueProvider()
   在 System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor)
   在 System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
   在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__19(AsyncCallback asyncCallback, Object asyncState)
   在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
   在 System.Web.Mvc.Async.AsyncResultWrapper.Begin[TResult](AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout)
   在 System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state)

虽然问题是由于升级至MVC 5.1引起的,但本着“遇到问题,先怀疑自己”的原则,检查了一下代码,竟然在js代码中发现了一个存在已久的低级错误:

var pagingBuider = { "PageIndex": 1 };
function buildPaging(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}

这时找茬的劲头一涌而出,一个大大的问号浮现在眼前。。。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索web
, c# .net mvc
, callback异常
, object
, mvc
, system
, 大写
, 低级错误
js生成大小写字母
,以便于您获取更多的相关知识。

时间: 2024-08-30 20:19:49

ASP.NET MVC 3升级至MVC 5.1的遭遇:“已添加了具有相同键的项”的相关文章

ASP.NET 4.0升级至ASP.NET 4.5需要注意的地方

原以为只要在Visual Studio 2012中将每个项目的Target framework设置为.NET Framewor 4.5进行编译,然后在web.config中设置compilation的targetFramework为4.5,就升级到了ASP.NET 4.5. <compilation targetFramework="4.5"/> 后来发现这样是不够的,还需要在web.config中设置httpRuntime的targetFramework. <htt

wcf-WCF寄宿在MVC,将MVC发布在IIS上WCF不能访问,求帮忙……

问题描述 WCF寄宿在MVC,将MVC发布在IIS上WCF不能访问,求帮忙-- 我在同一个解决方案下建立一个WCF服务库,一个MVC项目, WCF寄宿在MVC,将MVC发布在IIS上WCF不能访问,为何? 如果直接运行MVC可以访问到WCF,但是发布在IIS上出现404.3错误 如图1:项目 图2:错误 求帮忙,怎么才能解决? 解决方案 WCF本身支持分布式,一定这样吗?可以有两个解决方案!除此之外,可能你的IIS配置有问题!

asp.net搜索结果筛选问题,将选择的条件添加背景色,与非选中的样式区别开来

问题描述 asp.net搜索结果筛选问题,将选择的条件添加背景色,与非选中的样式区别开来 请问如何实现像×东的多条件筛选? 主要问题是选择了一个分类,点击下一个分类不知道已经点过的分类. 还有一个就是怎么让选择的分类加个背景颜色? 有空的帮我看看代码,我做了数据筛选,能根据传不同的参数从数据库查询到想要的数据,也有js代码,现在问题就是我通过地址栏传值,;然后在后台Request.QueryString获得值,再用Session[]已选择的值,如果点不限的时候session[]=null,js为

各位帮帮忙。asp.net一个值为空就报错,如何添加一个默认值输出

问题描述 各位帮帮忙.asp.net一个值为空就报错,如何添加一个默认值输出 打印一个PDF,快递类型是包裹,有那个英文品名就可以正确打印输出,如果选择文件,没有英文品名就无法输出,我怎么给他一个默认值,让他打印输出. 解决方案 你的SQL查询中把NULL转化为空字符串啊,比如SQL Server用SELECT ISNULL(英文品名,'') 英文品名,Oracle 用 SELECT NVL(英文品名,'') 英文品名. 解决方案二: 请采纳Tiger_zhao的建议

【ASP.NET】Webform与MVC开发比较

    去年暑假开始,跟着一个项目,开始接触到了MVC,那时候,自己对Webform的开发还没有在项目中真正实践过,没有什么过渡,就跳跃到MVC开发下了.而最近,在维护的一个项目中,并没有使用MVC开发,用的是Webform开发.这两次经历的结合,引发了我对本篇博客标题的思考,即Webform与MVC开发比较.     [Webform下的开发]     通过这次对ASP.NET Webform的重用,我发现它更接近可视化设计,换句话说,我只需要从设计面板中拖拽控件即可完成用户界面设计,接着在b

十步教你ASP.NET MVC2项目升级MVC 3 RC

微软在10号发布了ASP.NET MVC3的发布候选版(RC:Release-candidate),该版本提供了Razor视图引擎的智能感知等功能,并同样具备Online许可.眼馋的同学是不是已经迫不及待的想将现有项目升级呢?这里我就将官方ReleaseNotes中的升级办法翻译总结一下,以方便那些不喜欢看罗里嗦的英文文档的广大同学. 译文 要将现有的ASP.NET MVC2项目手动升级到ASP.NET MVC3(RC),我们需要如下这些步骤: 1. 随便创建一个新的ASP.NET MVC3项目

asp net mvc ef-asp.net mvc 中EF上下文的管理使用哪种方式好

问题描述 asp.net mvc 中EF上下文的管理使用哪种方式好 1,使用取线程内唯一实例的方式管理EF上下文 2,使用 using (AceManageEntities db=new AceManageEntities()) { } 请教下 使用哪种方式比较好,说说原因 解决方案 使用取线程内唯一实例的方式管理EF上下文好,毕竟是单例,减少了每次创建和销毁的过程 解决方案二: 两者没有本质的区别,即便你用using,也不会造成什么开销,底层ef使用连接池,而不是你关闭了连接它就回收的. 解决

ASP.N“.NET技术”ET MVC 入门介绍 (上)

参考文章 ASP.NET MVC Overview. 1. MVC模式 MVC模式是一种软件架构模式.它把软件系统分为三个部分:模型(Model),视图(View)和控制器(Controller).MVC模式最早由Trygve Reenskaug在1974年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能.除此之外,

ASP.N“.NET研究”ET MVC开发人员必备的五大工具

1. Chirpy Zippy 下载地址:上海徐汇企业网站制作rget="_blank">http://chirpy.codeplex.com/ 过去,在将JavaScript脚本和CSS文件部署到Web服务器之前,我习惯使用压缩工具进行压缩再部署,安装Chirpy后,你的脚本和CSS文件将会基于其名字自动压缩,例如,假设你有一个名叫myscript.js的脚步文件想要压缩,只要你将其重命名为myscript.yui.js,它就会调用YUI压缩程序自动压缩,压缩后的文件在解决方案