【问题标题】:Custom Command Kendo UI MVC 5 - Error Server binding自定义命令 Kendo UI MVC 5 - 错误服务器绑定
【发布时间】:2016-09-03 18:28:11
【问题描述】:

我尝试根据 KENDO 示例在网格上添加按钮详细信息,执行时会抛出错误: 自定义命令路由仅适用于服务器绑定。

这是我的观点和建议。

@(Html.Kendo().Grid<PedidosOnline.Models.Proveedor>()
.Name("Proveedores")
.Selectable()
.Columns(columns =>
{
    columns.Bound(c => c.ID);
    columns.Bound(c => c.sRazonSocial);
    columns.Bound(c => c.sCodigoTrib);
    columns.Bound(c => c.sDireccion);
    columns.Bound(c => c.sTelefono);
    columns.Bound(c => c.sEmail);
    columns.Bound(c => c.bActivo);
    columns.Command(command =>
    {
        command.Edit();
        command.Destroy();
        // Declare a custom command named "showDetails"
        command.Custom("showDetails")
                     .Text("Show details")
                     .Action("ShowDetails", "Proveedores")
                     .DataRouteValues(route =>
                     {
                         route.Add(o => o.ID).RouteKey("ID");
                     });
    }).Width(200);
})
.DataSource(datasourse => datasourse
    .Ajax()
    .Events(events => events.Error("errorHandler"))
    .Model(model =>
    {
        model.Id(prov => prov.ID);
        model.Field(prov => prov.ID).Editable(false);
    })
    .Read(read => read.Action("GetAllProveedores", "Proveedores"))
    .Update(update => update.Action("UpdateProveedores","Proveedores"))
    .Create(create => create.Action("CreatePorveedores","Proveedores"))
    .Destroy(destory=> destory.Action("DeleteProveedores","Proveedores"))
)
.ToolBar(toolbar => toolbar.Create())
.ToolBar(tools => tools.Excel())
.ToolBar(tools => tools.Pdf())

.Editable(editable => editable.Mode(GridEditMode.InLine))
//.Editable(editable => editable.Mode(GridEditMode.InCell))
//.Editable(editable => editable.Mode(GridEditMode.PopUp))

.Sortable()
.Selectable(selectable => selectable
        .Mode(GridSelectionMode.Multiple)
        //.Type(GridSelectionType.Cell)
        )

)

--------- 控制器 ------------

public ActionResult Index()
    {
        return View();
    }
    public ActionResult GetAllProveedores([DataSourceRequest] DataSourceRequest request)
    {
        try
        {
            //var query = db.Proveedores.Select(p => new { ID = p.ID, sRazonSocial = p.sRazonSocial });
            var query = from p in db.Proveedores
                        select new 
                        {
                             ID = p.ID, 
                             sRazonSocial = p.sRazonSocial
                        };

            return Json(query.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
        }
        catch (Exception ex)
        {                
            //throw;
            return Json(ex.Message);
        }
    }

    public ActionResult ShowDetails(int ID)
    {
        var detalles = db.Proveedores.FirstOrDefault(o => o.ID == ID);
        return View(detalles);
    }

【问题讨论】:

  • 知道错误的原因吗?

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


【解决方案1】:

如消息所述,Action 命令仅可用于服务器绑定。如果您想在使用 Ajax 绑定时创建一个指向不同视图的按钮,您可以使用其中包含超链接的模板列。

columns.Template(@<text></text>).ClientTemplate("<a href='"+Url.Action("ShowDetails","Proveedores")+"/#=ID#'>Show details</a>");

【讨论】:

  • 太棒了!非常感谢,我会努力实现的。问候。
【解决方案2】:

解决方案:

   @(Html.Kendo().Grid<PedidosOnline.Models.Proveedor>()
.Name("Proveedores")
.Selectable()
.Columns(columns =>
{
    columns.Bound(s => s.ID).Filterable(false);
    columns.Bound(c => c.sRazonSocial);
    columns.Bound(c => c.sCodigoTrib);
    columns.Bound(c => c.sDireccion);
    columns.Bound(c => c.sTelefono);
    columns.Bound(c => c.sEmail);
    columns.Bound(c => c.bActivo);

    columns.Template(@<text></text>)
        .ClientTemplate(@"<a class=""btn btn-info btn-xs k-grid-edit"" href=""\#""><i class='fa fa-edit'></i></a> " +
                        @"<a class=""btn btn-danger btn-xs k-grid-delete"" href=""\#""><i class='fa fa-trash'></i></a> " +
                        @"<a class=""btn btn-warning btn-xs k-grid-detalle"" href='javascript:;' onclick='detalleProv();'""><i class='fa fa-eye'></i></a>").Width(100);


})
.DataSource(datasourse => datasourse
        .Ajax()
        .Events(events => events.Error("errorHandler"))
        .Model(model =>
        {
            model.Id(prov => prov.ID);
            model.Field(prov => prov.ID).Editable(false);
        })
        .Read(read => read.Action("GetAllProveedores", "Proveedores"))
        .Update(update => update.Action("UpdateProveedores", "Proveedores"))
        .Create(create => create.Action("CreateProveedores", "Proveedores"))
        .Destroy(destory => destory.Action("DeleteProveedores", "Proveedores"))
)
.ToolBar(toolbar => toolbar.Create().HtmlAttributes(new { @class = "btn btn-primary btn-xs pull-right" }))
.ToolBar(tools => tools.Excel().HtmlAttributes(new { @class = "btn btn-primary btn-xs pull-right" }))
.ToolBar(tools => tools.Pdf().HtmlAttributes(new { @class = "btn btn-primary btn-xs pull-right" }))

    .Events(e => e.Edit("HideGridFields"))
.Editable(editable => editable.Mode(GridEditMode.PopUp))
.Sortable()
.Selectable()
.Navigatable()
.AllowCopy(true)
.ColumnMenu()
.Resizable(resizable => resizable.Columns(true))
.Reorderable(reorderable => reorderable.Columns(true))
.Filterable()
.Groupable()
.Pageable(pageable =>
    {
        pageable.Refresh(true);
        pageable.PageSizes(true);
    }
)    

/****** Seleccionar una fila del registro *******/
function getSelected() {
    var grid = $("#Proveedores").data("kendoGrid");

    if (grid != null) {
        var selectedRow = grid.dataItem(grid.select());
        if (selectedRow != null) {
            return selectedRow.ID;
        } else {
            bootbox.alert('Seleccione un Registro de la Grilla');
            return 0;
        }
    }
    return 0;
};

/****** Mostrar Modal de proveedores a partir del registro seleccionado *******/
function detalleProv (e) {
    //e.preventDefault();
    var modalHtml;
    var idProveedor = getSelected();

    if (idProveedor == 0) { return false;}
    $.ajax({
        mimeType: "text/html",
        url: '/Proveedores/ShowDetails?&ID='+idProveedor,
        type: 'GET',
        contentType: "application/json;charset=utf-8",
        async: false,
        success: function (data) {
            modalHtml = data;
        }
    });

    bootbox.dialog({
        message: modalHtml,
        title: "",

    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2013-10-09
    相关资源
    最近更新 更多