为什么Kendo Ui Grid不是MVC 4中的火灾更新动作?

时间:2013-06-10 12:07:17

标签: asp.net-mvc kendo-ui kendo-grid

我创建了可以创建,更新和删除数据的Kendo UI Grid。但它不是我的控制器中的更新操作。

这是我的代码:

<script src="~/Scripts/Kendo/jquery.min.js"></script>
<script src="~/Scripts/Kendo/kendo.all.min.js"></script>
<script src="~/Scripts/Kendo/kendo.aspnetmvc.min.js"></script>

@(Html.Kendo().Grid<SkuMetadata>()
  .Name("Grid")
  .Columns(colums =>
               {
                   colums.Bound(p => p.CompanyName).Width(100);
                   colums.Bound(p => p.BrandName).Width(100);
                   colums.Bound(p => p.ProductName).Width(100);
                   colums.Bound(p => p.SkuName).Groupable(false).Width(100);
                   colums.Command(command => { 
                       command.Edit();
                       command.Destroy(); }).Width(160);
               })
  .ToolBar(toolbar => toolbar.Create())
  .Editable(editable => editable.Mode(GridEditMode.PopUp))
      .Groupable()
      .Pageable()
      .Sortable()
      .Scrollable()
      .Filterable()

  .HtmlAttributes(new { style = "height: 500px;" })
  .DataSource(dataSource =>
              dataSource
                  .Ajax()     
                  .Batch(true)
                  .ServerOperation(false)
                  .PageSize(100)
                  .Events(events => events.Error("error_handler"))
                  .Model(model => model.Id(p => p.SkuId))
                  .Create(update => update.Action("CreateProducts", "Product"))
                  .Update(update => update.Action("UpdateProducts", "Product").Type(HttpVerbs.Post))
                  .Destroy(destroy => destroy.Action("DeleteProducts", "Product"))
                  .Read(read => read.Action("GetAllProducts", "Product"))))

我的行动是:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult UpdateProducts([DataSourceRequest] DataSourceRequest request, SkuMetadata skuMetadata)
    {
        return Json(_basicUnit.Skus.GetAllSku().ToDataSourceResult(request));
    }
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult DeleteProducts([DataSourceRequest] DataSourceRequest request, SkuMetadata skuMetadata)
    {

        return Json(_basicUnit.Skus.GetAllSku().ToDataSourceResult(request));
    }

创建和删除工作正常。我不明白为什么更新不起作用。我错过任何参考或我做错了什么?

5 个答案:

答案 0 :(得分:4)

使用此

 .DataSource(dataSource =>
          dataSource
              .Ajax()     
              .Batch(true)
              .ServerOperation(false)
              .PageSize(100)
              .Events(events => events.Error("error_handler"))
         ---->**.Model(model => { model.Id(p => p.ID); model.Field(p => p.ID).DefaultValue(16000000); })** <--------
              .Create(update => update.Action("CreateProducts", "Product"))
              .Update(update => update.Action("UpdateProducts", "Product").Type(HttpVerbs.Post))
              .Destroy(destroy => destroy.Action("DeleteProducts", "Product"))
              .Read(read => read.Action("GetAllProducts", "Product"))))

答案 1 :(得分:0)

尝试使用 [GridAction] 属性进行标记操作。

也许你必须写下类似的行为:

[AcceptVerbs(HttpVerbs.Post)]  
[GridAction]  
public ViewResult(...)  
{  
//do what you need..and if .ToDataSourceResult(..) return IEnumerable try write  
var model = _basicUnit.Skus.GetAllSku().ToDataSourceResult(request);  
return View(new GridModel(model));  
} 

答案 2 :(得分:0)

我首先将网格从批量编辑模式中取出,看看是否可以在更新弹出窗口中的记录后触发更新操作。

答案 3 :(得分:0)

您必须将ServerOperation(false)更改为ServerOperation(true)

答案 4 :(得分:0)

在渲染操作中,您必须在模型中发送ID值。

[PopulateViewData("PopulateViewData")]
public virtual ActionResult Novo()
{
    domain = ...;
    var model = new Model
    {
        Id = model.Id,
        Propertyx = model.PropertyX,
        ...
    };
 return View(model);
 }