C# ASP.NET MVC Telerik网格中的Ajax删除操作出错

C# ASP.NET MVC Telerik网格中的Ajax删除操作出错,c#,asp.net,asp.net-mvc,telerik,telerik-mvc,C#,Asp.net,Asp.net Mvc,Telerik,Telerik Mvc,我有一个简单的用于ASP.NETMVC的Telerik网格,带有Ajax delete命令。删除操作正常,但页面显示错误,不会更新 我还想在AJAX调用返回时调用自定义JavaScript,但不知道将代码放在哪里 以下是观点: Html.Telerik() .Grid<ScenarioVm>(Model) .Name("scenarioGrid") .DataBinding(dataBinding => dataBinding .Ajax

我有一个简单的用于ASP.NETMVC的Telerik网格,带有Ajax delete命令。删除操作正常,但页面显示错误,不会更新

我还想在AJAX调用返回时调用自定义JavaScript,但不知道将代码放在哪里

以下是观点:

Html.Telerik()
    .Grid<ScenarioVm>(Model)
    .Name("scenarioGrid")
    .DataBinding(dataBinding => dataBinding
        .Ajax()
        .Delete("Delete", "Scenario")
        .Select("Index", "Scenario"))
    .DataKeys(keys => keys.Add(c => c.Id))
    .Columns(columns =>
    {
        columns.Template(o => o.Name)
            .Title("Scenario")
            .FooterTemplate(@<text>Total @Model.Count()</text>);
        columns.Bound(o => o.IsLocked);
        columns.Bound(o => o.ContractMonth);
        columns.Bound(o => o.CreateDate);
        columns.Command(commands => commands
                .Delete()
                .ButtonType(GridButtonType.Image))
            .Title("Delete");
    })
    .Sortable()
    .Scrollable(scroll => scroll.Height(200))
    .ClientEvents(events => events.OnDelete("onDelete")))
控制器方法:

[HttpPost]
[GridAction]
public ActionResult Delete(Scenario scenario)
{
    Logger.Info("Delete scenario " + scenario);
    if (scenario == null)
    {
        return new EmptyResult();
    }

    try
    {
        _scenarioRepository.Delete(scenario);
        Logger.Info("Successfully deleted " + scenario);
    }
    catch(Exception e)
    {
        Logger.Error(scenario + e.Message, e);
        var result = new JsonResult
        {
            JsonRequestBehavior = JsonRequestBehavior.DenyGet,
            Data = new {
                ErrorCode = 1,
                ErrorMessage = e.GetType() + ": " + e.Message
            }
        };

        return result;
    }

    return new EmptyResult();
}

我认为上面的代码有几个地方是错误的。首先,在将请求发送到服务器之前,将在客户机上触发客户机事件。如果希望得到对服务器的Ajax调用的结果,则需要处理该事件。此事件在对服务器的Ajax调用完成并将结果返回给客户端后激发

其次,GridAction筛选器希望您向视图返回类型为的值。由于您没有返回预期值,因此在客户端上会出现错误。下面是控制器方法的示例:

[HttpPost]
[GridAction]
public ActionResult Delete(Scenario scenario)
{
    // Delete item and perform other operations as required
    var data = ... // Get an updated data set, with the deleted item removed
    var model = new GridModel<ScenarioVm>(data);
    return View(model);
}
[HttpPost]
[行动]
公共操作结果删除(场景)
{
//根据需要删除项目并执行其他操作
var data=…//获取更新的数据集,删除已删除的项
var模型=新网格模型(数据);
返回视图(模型);
}
下面是Telerik网站上详细讨论Ajax绑定的文章


我希望这会有所帮助。

如果我正确理解了这个问题,您希望在操作完成时执行javascript函数。示例源代码的最后一行是为OnComplete事件定义回调

.ClientEvents(events => events
            .OnLoad("onLoad")
            .OnEdit("onEdit")
            .OnDetailViewCollapse("onDetailViewCollapse")
            .OnDetailViewExpand("onDetailViewExpand")
            .OnDelete("onDelete")
            .OnSave("onSave")
            .OnDataBinding("onDataBinding")
            .OnRowDataBound("onRowDataBound")
            .OnRowSelect("onRowSelect")
            .OnDataBound("onDataBound")
            .OnColumnResize("onColumnResize")
            .OnColumnReorder("onColumnReorder")
            .OnComplete("onComplete"))

还有一个如何定义OnComplete事件的示例。

我尝试返回“返回视图(BuildViewModel());”通过controller Delete()方法,它在服务器上导致错误500。我需要OnDelete和OnComplete事件,以便在AJAX调用前后执行代码。如何指定OnComplete处理程序?“ClientEvents(events=>events.OnDelete(“OnDelete”).OnComplete(“OnComplete”))导致语法错误。@jprusakova您是否定义了OnComplete JavaScript函数?@Tx3我必须升级Telerik库才能使其正常工作。谢谢<代码>.ClientEvents(events=>events.OnDelete(“OnDelete”).OnComplete(“OnComplete”))导致编译错误:编译器错误消息:CS1061:“Telerik.Web.Mvc.UI.Fluent.GridClientEventsBuilder”不包含“OnComplete”的定义,并且找不到接受类型为“Telerik.Web.Mvc.UI.Fluent.GridClientEventsBuilder”的第一个参数的扩展方法“OnComplete”(是否缺少using指令或程序集引用?)
.ClientEvents(events => events
            .OnLoad("onLoad")
            .OnEdit("onEdit")
            .OnDetailViewCollapse("onDetailViewCollapse")
            .OnDetailViewExpand("onDetailViewExpand")
            .OnDelete("onDelete")
            .OnSave("onSave")
            .OnDataBinding("onDataBinding")
            .OnRowDataBound("onRowDataBound")
            .OnRowSelect("onRowSelect")
            .OnDataBound("onDataBound")
            .OnColumnResize("onColumnResize")
            .OnColumnReorder("onColumnReorder")
            .OnComplete("onComplete"))