如何在kendo UI中创建一个网格命令,该命令执行并返回更新网格的Ajax响应

时间:2013-08-17 20:41:38

标签: asp.net-mvc asp.net-ajax kendo-ui kendo-grid razor-2

我的Razor View中有以下网格。

<h2>Exchange Rates</h2>
@(Html.Kendo().Grid<ExchangeRateModel>()
      .Name("exchangeRateGrid")
      .DataSource(builder => builder
                                 .Ajax()
                                 .Model(model =>
                                            {
                                                model.Id(exchangeRate => exchangeRate.ExchangeRateId);
                                                model.Field(exchangeRate => exchangeRate.SourceCurrencyCode);
                                                model.Field(exchangeRate => exchangeRate.DestinationCurrencyCode);
                                                model.Field(exchangeRate => exchangeRate.Rate);
                                            })
                                 .Read("Get", "ExchangeRate")
      )
      .Columns(columns =>
                   {
                       columns.Bound(er => er.SourceCurrencyCode).Title("From");
                       columns.Bound(er => er.DestinationCurrencyCode).Title("To");
                       columns.Bound(er => er.Rate).Title("Rate");
                   })
      .Editable(ed=>ed.Mode(GridEditMode.PopUp))
      .Sortable()
      .Pageable()
      .ToolBar(tb => tb.Custom().Name("Import exchange rates from ECB").Action("ImportExchangeRates", "ExchangeRate"))
)

网格有一个工具栏命令,用于检索某些汇率。更新完成后,这些费率应显示在网格中。我正在寻找使用Ajax发生的请求(这种情况)。现在的问题是:

我应该在ImportExchangeRates命令或其他地方执行哪些操作,以便: 1)页面不会重新加载或重定向到白页 2)使用此命令更新的值更新网格。

目前我的命令以     return Redirect(Request.UrlReferrer.ToString()); 但这是不可接受的,因为这会重新加载整个页面。 如果我返回null,则站点重定向到空白页面。

我确信这很简单,但我对MVC和剑道都不熟悉。谢谢!

1 个答案:

答案 0 :(得分:0)

在Kendo UI演示中查看this sample

基本上,如果你想发出一个自定义按钮或运行一些代码来执行Ajax的其他东西,你将不得不深入研究一些JavaScript。

.Toolbar(tb => tb.Template(@<text>
    <button onClick="return importExchangeRates();">Import exchange rates from ECB</button>
</text>);

然后在你的脚本(客户端):

function importExchangeRates() {
    // perform Ajax request here, refresh grid in success handler
    var grid = $("#exchangeRateGrid").data("kendoGrid");

    // return false to prevent button doing silly things with the page in some browsers
    return false;
}

我担心你可能想要这个网格的两个不同的数据源,就像你的措辞一样。如果是这样会使事情复杂化。