如何在保存到存储库之前将临时数据添加到Telerik MVC Grid?

时间:2013-11-08 19:22:25

标签: c# .net asp.net-mvc razor telerik

前段时间我使用Devexpress组件开发了一个asp.net webforms应用程序,在aspxgridview中,我可以使用客户端在我的网格中插入行,而不是将其保存在我的数据库中。在用户插入他需要的所有行后,用户按下“发送”按钮然后我将所有数据发送到我的服务器端保存在Db中。

现在在我的MVC Telerik网格中,我无法弄清楚如何做同样的事情。 继承了我的观点:

  @(Html.Telerik()
      .Grid( Model )
      .Name( "DocumentGrid" )
      .DataKeys(a => a.Add(b=> b.IDDocument))
                      .ToolBar(commands => { commands.Insert().Text("add"); })
                      .Columns(c =>
                                   {                                         
                                       c.Bound(column => column.SupplierIdentification).Title("CNPJ/CPF");
                                       c.Bound(column => column.StatusDescription).Title("Status");                                           
                                       c.Bound(column => column.ExpirationDate).Title("Vencimento");
                                       c.Bound(column => column.IsStock).Title("Estoque");)
                                   .DataBinding(x => 
                                       x.Server().Insert("InsertNewDocument","Client"))
      .Editable(a => a.Mode(GridEditMode.InForm).TemplateName("AddDocumentModel")).ClientEvents(x => x.OnSave("onSave")))

正如你所看到的,我有一个Insert,它以我的模型作为参数调用一个动作,但我想在我完成向网格中添加行时“触发”Action。

继承我的自定义编辑模板上的javascript按钮:

            <a href="javascript:void(0);" onclick="OnUpdateClick(this)"><b>Confirm</b>

此按钮应调用OnUpdateClick函数,将temp行插入网格。

function OnUpdateClick() {
    var grid = $("#DocumentGrid").data("tGrid");
    var item = {};
    grid.insertRow(item);
}

我想这应该是这样的。 任何sugestions? 感谢

编辑:

当我编辑我的网格时,我从〜/ Shared / EditorTemplates文件夹中获取编辑模板,是否可以从EditorTemplate文件夹中的脚本获取我的网格数据?

1 个答案:

答案 0 :(得分:1)

为什么不使用Ajax数据绑定和网格操作模式作为客户端来简化它。

这是我在项目上所做的,所以我基本上可以在客户端批量更新和批量添加项目,它只会在保存时上传到服务器。应该是这样的。

@(Html.Telerik().Grid<YourViewModel>()
.Name("DocumentGrid")
.Columns(c =>
{
    c.Bound(column => column.SupplierIdentification).Title("CNPJ/CPF");
    c.Bound(column => column.StatusDescription).Title("Status");                                           
    c.Bound(column => column.ExpirationDate).Title("Vencimento");
    c.Bound(column => column.IsStock).Title("Estoque");
    c.Bound(a => a.IDDocument).Hidden()
})
.DataBinding(d => 
    d.Ajax()
        .OperationMode(GridOperationMode.Client)
        .Select("SelectAction", "YourController")
        .Update("UpdateAction", "YourController")
        .Insert("InsertAction", "YourController")
        .Delete("DeleteAction", "YourController")
    )
.Pageable(p => p.PageSize(50))
.Sortable()
.Scrollable()
.Groupable()
.Filterable()
.KeyboardNavigation()
.Resizable(r => r.Columns(true))
.Reorderable(r => r.Columns(true))
.Editable(e => 
    e.Mode(GridEditMode.InCell)
            .DataKeys(k => k.Add(a => a.IDDocument))
            .ToolBar(c => 
            {
                c.Insert();
                c.SubmitChanges();
            })
    )
)

您的行为将如下所示

[HttpPost]
[GridAction]
public ActionResult UpdateAction([Bind(Prefix = "updated")]IEnumerable<YourViewModel> updatedTransactions)
{
...
}

[HttpPost]
[GridAction]
public ActionResult InsertAction([Bind(Prefix = "inserted")]IEnumerable<YourViewModel> insertedTransactions)
{
...
}

[HttpPost]
[GridAction]
public ActionResult DeleteAction([Bind(Prefix = "deleted")]IEnumerable<YourViewModel> deletedTransactions)
{
...
}