「An item with the same key has already been added」系統執行到一半,突然跳出這個訊息,
仔細看一下錯誤訊息有一段寫道「System.Web.Mvc.DefaultModelBinder.BindProperty…」,
於是朝Model Binding 異常的方向前進。
首先看一下我們的Model:
1
2
3
4
5
public class InputModel : BaseModel
{
public string Email { get; set; }
//...
}
看起來很正常,而且我也確定前端Request 回來的資料,名稱是吻合的,
但錯誤訊息顯示「An item with the same key has already been added」,代表一定有什麼地方重複了,
仔細看一下,BaseModel:
1
2
3
4
public class BaseModel
{
public string email { get; set; }
}
有一個「email」 但跟「Email」不同,首個字母一個是大寫,另一個是小寫,
原來Model Binding 是不分大小寫的!這個地方要特別小心!
補充:
另外有一些特例,像是我們透過url query string 把資料帶回來,但若Action 強型別為Enum 這時又分大小寫了,
可以參考Model-binding is being case-sensitive when binding Url data to Enum parameter