<button class="btn btn-primary" data-bind="click:function(){show('add');}">Add</button>
我的目的是将输入记录值添加到后端,并带有自动Id编号。但是在我单击“添加”按钮后,显示“内部服务器错误”。记录有时会保存到数据库中。但Id为0.我已经设置Id属性为Nullable。下面是我的添加功能和对象。我可以从聪明人那里得到一些想法吗?非常感谢你。
self.addCustomer = function () {
debugger;
var cus = { Name : self.cusName(), Address: self.cusAddress()}
var url = "/Customer/AddCustomer";
$.ajax({
type: "POST",
url: url,
data: cus,
success: function (data) {
alert("Insert Successful!");
GetCustomers();
$('#AddCustomer').modal('hide');
},
error: function (error) {
alert(error.statusText);
}
});
};
self.customers = ko.observableArray([]);
GetCustomers();
function GetCustomers() {
$.ajax({
type: "GET",
url: "/Customer/GetCustomer",
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function (data) {
self.customers(data);
},
error: function (error) {
alert(error.statusText);
}
});
}
self.getSelected = function (cus) {
self.cusId(cus.Id),
self.cusName(cus.Name),
self.cusAddress(cus.Address)
};
后端后期行动。
[HttpPost]
public ActionResult AddCustomer(CustomerModel customer)
{
var cus = new Customer
{
//Id = customer.Id,
Name = customer.Name,
Address = customer.Address
};
customerContext.Customers.Add(cus);
customerContext.SaveChanges();
return null;
}
答案 0 :(得分:1)
反序列化时,如果数据中未指定控制器端点,则控制器端点的所有参数都将被赋予“默认”值。 C#中整数的默认值为0.因此,除非明确告知不是,否则CustomerModel的所有整数属性都将为0。
我假设CustomerModel.ID
是一个int,因为你没有包含那个代码。如果这是正确的,请尝试将其设为nullable<int>
。这样,当未指定值时,给定的默认值为null
。
同样的问题也适用于Customer
实体模型。如果该ID属性不是可以为空的值,则它将被赋予0默认值,除非EntityFramework知道它是自动增量(标识)字段。