4

ajaxを使用してデータを取得するTelerikMVCグリッドがあり、いつロードされるかを制御したいと思います。

これが私の見解のコードです:

@(Html.Telerik().Grid<ViewModels.Reports.UserActionLoggingDetailViewModel>()
          .Name("UserActionLoggingFollowedGrid")
          .DataBinding(dataBinding => dataBinding.Ajax().Select("SelectUserActionLogging", "Report", new { userTeamId = Model.UserTeamId, startDate = Model.StartDate, endDate = Model.EndDate }).OperationMode(GridOperationMode.Client))
          .Columns(columns =>
                      {
                         columns.Bound(x => x.FullName).Hidden();
                         columns.Bound(x => x.ActionName);
                         columns.Bound(x => x.ActionCount);
                      })
          .Pageable(page => page.PageSize(20))
          .Sortable()
          .Groupable(grouping => grouping.Groups(groups => groups.Add(c => c.FullName)).Visible(false))
          .Filterable()
          .Localizable("fr-FR")
          .HtmlAttributes(new { @class = "grid-style static-grid-style" })
          .ClientEvents(e => e.OnError("Grid_onServerError").OnDataBinding("Grid_onDataBinding").OnDataBound("Grid_onDataBound"))
        )

デフォルトでは、このコードは正しく機能します。ページが読み込まれると、グリッドは指定されたアクションのPOSTリクエストをサーバーに自動的に送信し、返されたデータを自分自身に読み込みます。

私が欲しいのは、同じ動作の同じグリッドですが、ページがロードされるときにデータをロードしません。ユーザーがボタンまたはその他のアクションをクリックしたときにグリッドが読み込まれるようにしたい。

グリッドを手動で更新する方法を示す興味深い投稿をいくつか見つけましたが、グリッドの最初のバインドを防ぐ方法を指定した人は誰もいませんでした。

4

2 に答える 2

5

この小さな作品は私のために働きます。データ バインディング クライアント イベントを追加します (既にあるようです)。

.ClientEvents(events => events
    .OnDataBinding("preventAjaxSelectOnPageLoad"))

次に、この JavaScript を追加して作成します。

<script type="text/javascript">

    var gridsToBind = [];

    function preventAjaxSelectOnPageLoad(e)
    {
        if ($.inArray(e.target.id, gridsToBind) == -1)
        {
            e.preventDefault();
            gridsToBind.push(e.target.id);
        }
    }
</script>

基本的に、バインドする必要があるグリッドを追跡する配列を作成します。ページが読み込まれると、配列は空になります。その時点で、データ バインディング イベントがキャンセルされ、グリッドが配列に追加されます。次に ajaxRequest() が呼び出されたときに、グリッドが配列に存在し、正常にバインドできます。

于 2012-07-27T14:17:59.880 に答える
0

グリッドの DataBinding または DataBound イベントのハンドラーを追加して、そこでページの最初の読み込みかどうかを確認できると思います。その場合、サーバーへの呼び出しを避けるために e.preventDefault() を使用します。

他のオプションは、Grid 宣言から ajax バインディングを削除し、dataBind メソッドを使用して自分で行うことができます

于 2012-07-27T02:13:14.240 に答える