jquery $.ajax 的 MVC 3 反序列化请求 json 到对象中填充空值而不是空白字符串
MVC 3 deserialization of jquery $.ajax request json into object populates nulls instead of blank strings
我正在做这个ajax调用:
$.ajax({
url: "/test/whatever",
type: 'post',
contentType: 'application/json'
data: {"fieldone":'test',"fieldtwo":'',"fieldthree":null,"fieldfour":'test'}
});
在控制器中,我有:
[HttpPost]
public string Whatever(MyModel object)
{
//fieldone, fieldtwo and fieldthree are all type string
//at this point:
// object.fieldone contains the string 'test'
// object.fieldtwo is NULL, but WHY?! and how can I have it correctly deserialize to blank string
// object.fieldthree is correctly null, which is fine
// I have no fieldfour in my object, so it is ignored, that makes sense.
// object.newfield is correctly null, because I didn't pass a value for it in my JS
}
那么,有谁知道为什么在这种情况下空白字符串会变成空值?我发现了这篇文章,其中讨论了 javascriptserializer 中可空属性的错误:
http://juristr.com/blog/2012/02/aspnet-MVC3-不反序列化-空/
但我的情况比这更简单,我只想对包含描述性字段的对象进行解体和对象,其中一些可能是空白字符串。
我需要分辨空白字符串和空值之间的区别,以便在获得任何空值时可以抛出异常(发生这种情况时,我的客户端 js 代码通常与 c# 对象不同步,我想知道它)。
有MVC专家可以为我阐明这一点吗?
谢谢!
我认为
问题是ModelBinder的默认行为是将空字段转换为模型中类型的默认值(MyClass),因此在这些字段中发送空字符串将转换为
... = default(string);
这会给你空。
要更改此行为,我认为您需要为该类创建自己的ModelBinder,并将这些字段设置为空字符串(如果它们出现在请求中,但它们是空的)
相关文章:
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 映射数组ES6时考虑空值
- Model中的Typeahead返回空值以形成输入字段
- JavaScript-HTML表单到JSON(空值)和格式
- 使用两个下拉列表的值填充文本框
- webkit输入类型=在错误日期发送空值的日期
- 为什么数据列表选项的id返回空值
- KnockoutJS-根据第一个组合框中选择的值填充第二个组合框
- 如何使用敲除映射将空值映射到空的可观察数组
- 完整日历:在启动时传递空值
- 为什么此函数会过滤掉“空”值
- 使用 for 循环用逗号分隔的值填充选择元素
- 通过 Yii2 表单插入数据时获取空值
- jquery $.ajax 的 MVC 3 反序列化请求 json 到对象中填充空值而不是空白字符串
- 使用angular js的Json rest客户端无法填充数据(空值)
- 如何使用默认值填充文本字段或将其保留为空,所有这些都取决于下拉列表中的选择
- 提交由javascript填充的表单会在Wicket中显示空值
- 用空值和填充FormGroup
- 当用户取消提示时,如何避免在空值上填充文本区域
- 自动填充空值在ng模型中,从ng选项获取数据