Этот обратный вызов AJAX, приведенный ниже, фактически передал строку JSON, содержащую объект JSON, что является неправильным и приводит к тому, что customer
содержит нулевое значение, которое выдает NullReferenceException
(настоятельно рекомендуется поставить нулевую проверку перед использованием контекста сущности EF):
$.ajax({
type: "POST",
url: "/Home/UpdateCustomer",
data: '{customer:' + JSON.stringify(customer) + '}', // this is wrong
contentType: "application/json; charset=utf-8",
dataType: "json"
});
Вместо передачи строки JSON, подобной этой, просто используйте data: JSON.stringify(customer)
или просто передайте весь объект напрямую с помощью data: customer
и удалите параметр contentType
:
$.ajax({
type: "POST",
url: "/Home/UpdateCustomer",
data: customer,
dataType: "json",
success: function (result) {
// do something
}
});
Относительно второго вопроса, который выбралданные из запроса таблицы не обновляются, это зависит от настройки автоматического слежения из EF.Если автоматическое слежение отключено, вам необходимо установить EntityState.Modified
перед использованием SaveChanges()
:
if (customer != null)
{
using (CustomersEntities entities = new CustomersEntities())
{
Customer updatedCustomer = (from c in entities.Customers
where c.CustomerId == customer.CustomerId
select c).FirstOrDefault();
updatedCustomer.Nome = customer.Nome;
updatedCustomer.Tipo = customer.Tipo;
updatedCustomer.NCM = customer.NCM;
updatedCustomer.Contabil = customer.Contabil;
// if EF auto-tracking is disabled, this line is mandatory
entities.Entry(updatedCustomer).State = System.Data.Entity.EntityState.Modified;
entities.SaveChanges();
}
}
Примечания:
1) Вы можете увидеть все методыобновить существующие данные с помощью EF в этой ссылке .
2) Эта скрипка содержит образец для выполнения запроса AJAX из содержимого таблицы.