当 viewmodel 中的属性继承自时,WebApi 模型绑定失败Dictionary<string, string>
。当属性的数据类型更改为 just 时,相同的模型绑定起作用Dictionary<string, string>
。
以下是绑定不起作用的示例。
当我将网页数据提交到 ApiController 时,绑定不会绑定MyDictionary<string, string>
ExtraData 属性。如果我将属性更改为Dictionary<string, string>
ExtraData 属性,那么 Api 控制器将正确绑定。但是,这不是一个选项,因为 MyDictionary 类具有我需要的附加功能。
我有一个继承自 Dictionary 的类,<>
如下所示:
public class MyDictionary<TKey, TVal> : Dictionary<TKey, TVal>
{
}
我有一个具有MyDictionary类型属性的类
public class HomeModel
{
public string Name{ get; set; }
public MyDictionary<string, string> ExtraData { get; set; }
public HomeModel()
{
ExtraData = new MyDictionary<string, string>();
}
}
我有一个像这样的 ApiController (它没有正确绑定。ExtraData.Count总是返回零):
public class HomeApiController : ApiController
{
// POST api/homeapi
[HttpPost]
[ActionName("Complex")]
public string PostComplex([FromBody]HomeModel model)
{
return string.Format("vm.ExtraData.Count = {0}", model.ExtraData.Count);
}
}
html 表单片段如下所示:
<ul>
<li>
<input type="text" name="ExtraData[0].Key" value="Key1"/>
<input type="text" name="ExtraData[0].Value" value="Value1"/>
</li>
<li>
<input type="text" name="ExtraData[1].Key" value="Key2"/>
<input type="text" name="ExtraData[1].Value" value="Value2"/>
</li>
<li>
<input type="text" name="ExtraData[2].Key" value="Key3"/>
<input type="text" name="ExtraData[2].Value" value="Value3"/>
</li>
</ul>
关于为什么模型绑定不适用于继承的属性的任何想法Dictionary<string, string>
?
数据正在通过一个简单的帖子提交给 ApiController,如下所示:
var sendFormData = function (addr) {
var jqxhr = $.post(addr, $('form').serialize())
.success(function (x) {
alert(x);
})
.error(function () {
alert("Failure");
});
return false;
};
$("#submitWebApi").click(function () {
$("form").submit(sendFormData('api/homeapi/complex'));
});