我发出一个Ajax Post请求,将Javascript对象作为Json参数发送到MVC操作:
var productName, exchangeName, productCode, stockCode;
var categoryID, brandID, stockAmount, state, shippingWeight;
var sendinfo =
{
"pcb": {
"ProductViewModel": {
"ProductName": + $('#ProductViewModel_ProductName').val()
"ProductCode": + $('#ProductViewModel_ProductCode').val(),
"StockCode": +$('#StockViewModel_StockCode').val(),
"StockAmount": +$('#StockViewModel_StockAmount').val(),
"ShippingWeight": +$('#ProductViewModel_ShippingWeight').val(),
"State": +state
},
"CategoryViewModel": { "Kategori": +categoryID },
"BrandViewModel": { "BrandName": +brandID },
"ExchangeViewModel": { "ExchangeName": +exchangeName }
}
};
我的问题是关于这些属性的类型。有些是作为字符串输入,但是这个对象只接受数字(我看到当我悬停在pcb上时),当我输入字符串而不是数字时输出null。为什么会这样?
我尝试将属性逐个转换为:
string($('#StockViewModel_StockCode').val())
并尝试了JSON.stringify(),但在此对象中无效...
答案 0 :(得分:0)
为什么会这样?
因为代码明确地告诉它,使用一元+
:
"ProductName": + $('#ProductViewModel_ProductName').val()
// ------------^
和
"CategoryViewModel": { "Kategori": +categoryID }
// --------------------------------^
等等。
当您将一元+
应用于字符串时,它会被强制转换为数字。如果无法将其识别为有效数字,则结果为NaN
。 (您已经说过,您已经看到null
了,这表示您在某些时候,系列化为JSON; NaN
在序列化时转换为null
作为JSON,因为JSON没有NaN
值。)
如果您需要字符串,请从产生相关属性的代码中删除+
。