2017-02-03 5 views
0

私はasp.net MVCでグリッドを使用しています。現在、グリッドは.DataSource(c => c.Read())を使用して、グリッドに入るIEnumerable<item>を返すURLを呼び出します。.Read()からメタデータを返し、それを剣道のグリッドで使用する

グリッドにページングを実装したいと思います。しかし、データにはページングの通常の方法(カウント、ページ番号など)はありません。

{ items: [. . . ], nextPage: 'J23jeg9e93', previousPage: 'oqow0r93285' }

は、あなたがデータを再度要求を行う必要があり、次のページを取得するには、しかし、次のページングトークンが含まれています。私は内部的に自分のデータを取得するとき

は、代わりに私はこのようなデータを取り戻しますまたは前のページ。

現時点では、アイテム配列をグリッドに戻すだけなので、nextPage/previousPageメタデータはありません。

にメタデータを置くために何のラッパーオブジェクトが存在しないので、私は単に項目のIEnumerableをを返していますように私は、このメタデータを含めるする方法を参照することはできません。

を私はにメタデータを添付する.Data()を使用することができます私はそれを別の方法で行う必要があります。一旦私がメタデータを取り戻せば、私はそれを送ることができるようにjavascript変数に格納できるようにする必要があります.Data()

+0

剣道がそれを解析する前に、どこかにあなたのデータの 'nextPage'と' previousPage'情報を追加する必要がありますか? – DontVoteMeDown

+0

'Read()'コマンドはグリッドに入る '[{name: 'bob'、age:23}、{name: 'jim'、age:43} ...]'のようなデータを返します。しかし、次のページトークンと前のページトークンを持つメタデータを含める必要があります。しかし、私はリストを返すだけなので、私はそれを含めることはできません。 – NibblyPig

+0

残念なことにidkは非常によく剣道Asp.netのフレームワークですが、Javascriptではこれを行うには2つの可能な方法があると思います:あなたのメタデータを 'dataSource.schema.parse'イベントに追加してください。または 'dataSource.transport。関数を使用して独自のリクエストを作成し、データをウィジェットに渡すことができます。そこにメタデータを追加することができます。しかし、それが剣道Asp.Netでできるかどうかはわかりません。私はそれが可能だと信じています。 – DontVoteMeDown

答えて

1

どのように実際にNextPage、PreviousPage操作をトリガーしているのか分かりません...

MVCカスタムデータソース設定を使用すると、スキーマ設定のような多くのオプションにアクセスできます。以下のために((グリッドに与えること)

{ items: [. . . ], nextPage: 'J23jeg9e93', previousPage: 'oqow0r93285' } 

と項目を抽出し、NEXTPAGE、previousPage値: http://docs.telerik.com/aspnet-mvc/getting-started/custom-datasource

スキーマの設定は、カスタム結果の形式を取ることができます解析機能を追加することができますあなたは次の読み取り要求に渡すために保存する必要があります)。例えば

サンプルグリッド:

@(Html.Kendo().Grid<TelerikMvcApp4.Models.GridViewModel>() 
.Name("grid") 
.DataSource(ds => ds 
    .Custom() 
    .Batch(true) 
    .Schema(schema => schema 
     .Parse(@<text>parseData</text>) 
    ) 
    .Transport(transport => transport 
     .Read(read => read.Action("Grid_Read", "Home").Type(HttpVerbs.Post).Data("readData")) 
    ) 
    .PageSize(1) 
    .ServerPaging(true) 
) 
.Pageable() 
) 

サンプルparseData及びて、readDataのjavascript:

<script> 
var nextPage, 
    previousPage; 
function readData() { 
    // Return the "extra" data that should be posted with each grid read request, which is the nextPage/previousPage we were given in the previous request respsonse. 
    return { 
     nextPage: nextPage, 
     previousPage: previousPage 
    }; 
} 
function parseData(data) { 
    // Parse the response from the server as it isn't in the typical format expected by the grid. 

    // Extract your nextPage/previousPage, store it somewhere so they can be added to the next grid request. 
    nextPage = data.nextPage; 
    previousPage = data.previousPage; 

    // Return the actual data that should be displayed in the grid. 
    return data.items; 
} 
</script> 

サンプルグリッドは、アクションを読み取る:

[HttpPost] 
    public ActionResult Grid_Read([DataSourceRequest] DataSourceRequest request, string nextPage, string previousPage) 
    { 

     // "Fetch" the data, presumably doing something with nextPage and previousPage... 
     var items = new List<GridViewModel>() 
     { 
      new GridViewModel() { name = "bob", age = 23}, 
      new GridViewModel() { name = "jim", age = 43}, 
     }; 
     // Determine what the new nextPage, previousPage should be... 
     var newNextPage = "J23jeg9e93"; 
     var newPreviousPage = "oqow0r93285"; 

     return Json(new 
     { 
      items = items, 
      nextPage = newNextPage, 
      previousPage = newPreviousPage 
     }); 
    } 

これはありません共同頑丈なソリューションですが、それは実行可能にでき、少なくともあなたを可能な方向に向けるでしょう。

+0

それはまさに私がやりたかったようです。私はまた、次の/前のボタンに取り組む方法もわかりませんが、私はそれを理解することができるはずです。私は今これを試してみるつもりです。 – NibblyPig

+0

多くのお礼をいただきました。 – NibblyPig

+0

私のpageTokenを読み込み要求に含める.Dataメソッドは、最初にグリッドが読み込まれた後に再度実行され、再度実行されないため、送信される値は常に初期値(空文字列) 。グリッドを '$( '#messagesgrid')でリフレッシュしています。data( 'kendoGrid')。dataSource.read(); – NibblyPig

関連する問題