Я делаю запрос 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(), но не работал внутри этого объекта...
Почему это происходит?
Потому что код явно сообщает об этом, используя unary +
:
"ProductName": + $('#ProductViewModel_ProductName').val()
// ------------^
а также
"CategoryViewModel": { "Kategori": +categoryID }
// --------------------------------^
и так далее.
Когда вы применяете унарный символ +
к строке, он принуждается к числу. Если он не может быть признан допустимым числом, результатом будет NaN
. (Вы сказали, что видите null
, что говорит о том, что в какой-то момент вы сериализуете JSON, NaN
преобразуется в null
при сериализации как JSON, поскольку JSON не имеет значения NaN
.)
Если вам нужны строки, удалите +
из кода, создающего соответствующее свойство.
parseInt()
.