如何使用ASP.NET MVC和KnockoutJS很好地添加记录?

时间:2017-08-14 22:41:57

标签: c# asp.net-mvc knockout.js

<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;
    }

1 个答案:

答案 0 :(得分:1)

反序列化时,如果数据中未指定控制器端点,则控制器端点的所有参数都将被赋予“默认”值。 C#中整数的默认值为0.因此,除非明确告知不是,否则CustomerModel的所有整数属性都将为0。

我假设CustomerModel.ID是一个int,因为你没有包含那个代码。如果这是正确的,请尝试将其设为nullable<int>。这样,当未指定值时,给定的默认值为null

同样的问题也适用于Customer实体模型。如果该ID属性不是可以为空的值,则它将被赋予0默认值,除非EntityFramework知道它是自动增量(标识)字段。