KendoGrid - MVC - 实体 - 标识列

时间:2013-01-10 11:05:48

标签: grid kendo-ui identity-column

我正在使用KendoGrids构建MVC,实体应用程序。

我已经构建了这个kendoGrid

    @(Html.Kendo().Grid<ModelApp.Models.Tickets>()
.Name("ticketgrid")
.Columns(columns =>
    {

        columns.Bound(p => p.TicketID).Title("ID");
        columns.ForeignKey(p => p.CustomerID, (System.Collections.IEnumerable)ViewData["customers"], "CustomerID", "CustomerName").Title("Customer");
        columns.ForeignKey(p => p.AreaOfBusinessID, (System.Collections.IEnumerable)ViewData["areaofbusinesses"], "AreaOfBusinessID", "AreaOfBusiness1").Title("AreaOfBusiness");
         columns.Bound(p => p.OccurredOn).Title("Occured").Format("{0:yyyy-MM-dd}");
        columns.ForeignKey(p => p.SeverityID, (System.Collections.IEnumerable)ViewData["severities"], "SeverityID", "Severity1").Title("Severity");
        columns.ForeignKey(p => p.AssigneeID, (System.Collections.IEnumerable)ViewData["assignees"], "AssigneeID", "AssigneeName").Title("Assignee");
        columns.ForeignKey(p => p.TicketStatusID, (System.Collections.IEnumerable)ViewData["ticketstatuses"], "TicketStatusID", "TicketStatus1").Title("Status");
        columns.Bound(p => p.UserID).Title("User");
        columns.Bound(p => p.DateRegistered).Title("Registered").Format("{0:yyyy-MM-dd}");
})
.DataSource(dataSource => 
    dataSource
.Ajax()
.Model(model => model.Id(p => p.TicketID))
.Read(read => read.Action("Index","Ticket"))
.Create(create => create.Action("Create", "Ticket"))
.Update(update => update.Action("Edit", "Ticket"))
//.Destroy(destroy => destroy.Action("Delete", "Ticket"))        
    )
    .Pageable()
    .Editable(editing => editing.Mode(GridEditMode.InCell))
    .ToolBar(toolbar =>
    {
        toolbar.Create();
        toolbar.Save();
    })
    .Navigatable()
    .Selectable()

    )

我正面临着两个问题

1)TicketID列是标识列。当我选择“创建”按钮时,它将获取零。我怎样才能让Gid理解它不应该搞乱这个列并且数据库会处理它? 当然,无论如何都没有插入,这让我想到了第二个问题

2)编辑不会发布到数据库

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit([DataSourceRequest] DataSourceRequest request, IEnumerable<ModelApp.Models.Tickets> models)
    {
        if (models != null)
        {
            try
            {
                foreach (var updatedEntity in models)
                {
                    var itemToUpdate = db.Tickets.Where(p => p.TicketID == updatedEntity.TicketID).FirstOrDefault();
                    if (itemToUpdate != null)
                    {
                        itemToUpdate.CustomerID = updatedEntity.CustomerID;
                        itemToUpdate.AreaOfBusinessID = updatedEntity.AreaOfBusinessID;
                        itemToUpdate.AssigneeID = updatedEntity.AssigneeID;
                        itemToUpdate.OccurredOn = updatedEntity.OccurredOn;
                        itemToUpdate.SeverityID = updatedEntity.SeverityID;
                        itemToUpdate.DateRegistered = updatedEntity.DateRegistered;
                        itemToUpdate.UserID = updatedEntity.UserID;
                        db.SaveChanges();
                        ModelState.Clear();
                    }
                }
            }
            catch (Exception e)
            {
                db.add_exception_log(e.Message, "UPDATE RATES");

            }
        }
        return Json(ModelState.ToDataSourceResult());
    }

因为模型为空。任何线索为什么?

提前完成

1 个答案:

答案 0 :(得分:1)

1)您应该在dataSource的Model配置器中使该字段不可编辑

model=>{
    model.Fiedl(p=>p.TicketID).Editable(false);
}

2)您没有使用批量编辑来期望收集 - 将签名更改为期望单个记录

public ActionResult Edit([DataSourceRequest] DataSourceRequest request, ModelApp.Models.Tickets model)