0

メインページと2つの部分ビューがあります。1つの部分ビューはメニューで、もう1つはtelerikグリッドです。達成したいのは、グリッド内の行を選択することです。メニューのボタンをクリックすると、選択した行(id)を渡すアクションにページが移動します。グリッド付きのdivだけでなく、ページ全体を更新したい。

使ってみdocument.location = "/Pedido/DetalhePedido/" + id; ましたが、コントローラーのIDが届きません。$.get('@Url.Action("detalhePedido", "Pedido")', data, function (result) { });また、通常はこれを使用してdivを更新しようとしましたが、ページ全体でこれを機能させることができないようです(おそらくそうではないはずです)。

この種の動作を再現するために、Webアプリで通常使用する方法はありますか?

4

1 に答える 1

0

行のクリックはブラウザーで行われるため、元のモデルのどこかに既に存在しない限り、コントローラーまたはモデルから何にも依存することはできません。これを実装するには、非表示のID列をグリッドに追加し、レンダリングに使用するモデルを作成してから、クライアントイベントとハンドラーをグリッドとビューに追加します。利用できるさまざまなクライアントイベントのいくつかについては、クライアント側イベントの下のグリッドに提供されているサンプルを確認してください。

グリッドで、最初にId列を追加します(必要に応じて非表示にします)。

.Columns(columns =>
{
   columns.Bound(o => o.Id).Hidden(true);
}

次に、ClientEventsを追加し、次のようにonRowSelectを接続します。

.ClientEvents(events =>
{
    events.OnRowSelect("onRowSelected");
}

次に、このイベントを次のように処理する関数を追加します。

function onRowSelected(e) {
    var id = e.row.cells[0].innerHTML;
    window.location = "Something/Details/" + id;
}

アップデート

クライアントですべてを正しく行っているようです。問題は、アクションまたはバインディングの他の場所で発生する可能性があります。ただし、確かに、そのパスをたどる前に、 / Pedido / DetalhePedido / "+ idが実際にアラートとともに何であるかを確認してください。それを取得して、ブラウザーのURLに直接入力し、アクションを実行できるはずです。アクションが正しく定義されている限り、idと呼ばれるintを受け入れます。

それでも問題が解決しない場合は、自分の行動を確認する必要があります。投稿用にマークされていますか?Window.Locationの場合、投稿ではないため機能しません。名前付きIdおよび型intを受け入れる引数ですか?そうでない場合は、そうすべきですか?ルートを変更しましたか?変更した場合、URLは定義されたルートと一致しますか?

于 2012-09-14T09:15:35.393 に答える