ArgumentException: 已添加了具有相同鍵的項。


此問題出現在asp.net mvc 5 中,前端向后端請求數據,方法的參數是模型,比如 Add(Student m), 結果瀏覽器顯示的狀態是500並返回錯誤提示ArgumentException,如標題,堆棧信息就不貼了,網上可以搜到很多這個問題的解決辦法。

這個問題出現的原因中,除了前端傳的參數中含有兩個以上大小寫不同的參數名,還有就是模型定義問題,可能有兩個大小寫不同的屬性。以上均是因為大小寫不同的參數名重復添加到字典里面,才會報這個錯。

解決問題思路是:

第一、看完堆棧信息,不是自己代碼出的錯,直接調試源碼,此法萬能,沒有調試不了的bug,就怕斷點斷在哪里都不知道,且對小白極不友好,僅適合高端玩家,不推薦。

第二、用嘗試,模仿的方式去試探是定位是哪一塊的原因。比如新增一個方法名不同,參數一樣的方法嘗試請求(用這個方法解決了前端元素綁定點擊事件報 search 方法不存在的問題 onclick=“search();”,沒深究,search可能是關鍵字什么的,改個名字就好了)。還有用同樣方法名,改變參數再嘗試請求,這時會發現不用那個模型作為參數就不報錯了,那么問題就出在模型上了,這時候先把問題記下來,先改用常規的參數接收寫法,多寫幾個參數,保證不在報錯,之后再研究是模型哪里的問題。這類辦法需要有相當的經驗,才能想到,往哪方面嘗試比較容易定位問題,看個人功底。

第三、回滾。問題總是突然出現的,很多同學應該都經歷過,之前明明還好好地,怎么上個廁所回來就這樣了。別急先保存一份現在的代碼,然后一點點撤銷最后面改的代碼,每撤銷一次就運行測試一次,撤銷到上一次提交代碼之前,你總能發現是改了哪一行引起的問題,找到之后,再看看什么 是寫法不對還是什么,或者換個寫法,換個姿勢什么的就好了。此類辦法也是萬能的,不管有沒有相關經驗,都可以手動回滾到以前正確的時候,以此來定位然后解決問題。

總結:以上思路適合各種語言各種環境出現問題時可以參考的思路,使得在沒有相關知識經驗的時候也能解決問題。其實不是我們解決不了問題,是很多同學碰到不熟悉的問題時,通常都會一臉懵逼不知所措無從下手,還有習慣了把問題丟給別人的就想也不想直接問人家,這個問題怎么辦,代碼也不貼,問題雖然解決了但是卻得不到提高,打了怪也不漲經驗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM