我正在尝试绑定属于Dictionary的项目,并且一切正常,直到我遇到KeyValuePairs,其中Key包含方括号。例如,想象一下这种人为的情景:
model = new MyModel {
MyDict = new Dictionary<string, string> {
{ "Apple[1]", "Green" }
}
}
然后我创建一个表单如下:
Html.EditorFor(model => model.MyDict["Apple[1]"])
正如预期的那样,该字段如下所示:
<input id="MyDict_Apple_1__" name="MyDict[Apple[1]]"> type="text" value="Green">
问题在于,当提交表单时,ModelBinder会删除最后一个括号:ModelBindingContext.ModelName是“MyDict [Apple [1]”。
这是DefaultModelBinder中的错误,还是我错过了什么?
更新
我发现FormValueProvider如何从数据中读取密钥存在错误。具体来说,该错误位于Microsoft.AspNetCore.Mvc.Internal.PrefixContainer的GetKeyFromEmptyPrefix方法中。
目前我正在使用旧的绑定语法处理该问题,其中包含Key和Value的单独字段:
<input type="hidden" name="MyDict[0].Key" value="Apple[1]" />
<input type="text" name="MyDict[0].Value" value="Green" />