Я подозреваю, что в этом вопросе есть несколько недоразумений. Результат ExecuteNonQuery
путается с выходным кодом или результатом хранимой процедуры. return Json(..)
передается одно число, но код Javascript ожидает, что ответ будет содержать объект. Environment variable
похоже, не имеет никакого отношения к проблеме.
Код Javascript:
var jsonData = JSON.parse(responseBody);
...
.... jsonData.customerId);
Ожидается, что ответ будет содержать строку JSON, содержащую один объект с атрибутом customerId
.
Код сервера, однако, возвращает только количество строк:
return Json(baseDataAccess.ExecuteNonQuery("[dbo].[CreateCustomer]", parametersList, CommandType.StoredProcedure));
ExecuteNonQuery возвращает количество строк, затронутых запросом или хранимой процедурой. Вставка одной строки возвращает 1. Она не возвращает результат хранимой процедуры или выходные параметры.
Это означает, что сервер эффективно выполняет это:
return Json(1);
Ответ будет содержать простой 1
.
Чтобы вернуть объект JSON с customerId
, код должен измениться на:
var newItem=new {customerId=thatNewId;};
return Json(newItem);
Это вернет {'customerId: 1234}
, что ожидает Javascript.
Не зная, что делает хранимая процедура, остается только догадываться, как извлечь новый идентификатор. В коде C # нет выходных параметров, поэтому я предполагаю, что идентификатор возвращается в виде одного результата, например, с:
SELECT @@IDENTITY;
Веб-приложение должно использовать ExecuteScalar :
var thatNewId = baseDataAccess.ExecuteScalar("[dbo].[CreateCustomer]",
parametersList,
CommandType.StoredProcedure);
Собираем все вместе:
var thatNewId = baseDataAccess.ExecuteScalar("[dbo].[CreateCustomer]",
parametersList,
CommandType.StoredProcedure);
var newItem=new {customerId=thatNewId;};
return Json(newItem);
Я просто предположу, что код POSTMAN правильный