3

プレーン クラス オブジェクトにバインドされた WebGrid があります。ファンシーなものはありません。グリッドにはいくつかのページング機能があり、ユーザーのリストを表示するために使用されます。グリッドの最後の列は、いくつかの編集コントロールを含むポップアップ DIV を起動する Ajax アクション リンクです。この編集が完了すると、OnSuccess イベントが発生し、DIV が閉じます。これは、適用されている現在のページ/検索/フィルターを失うことなく、グリッドを更新したい場所です。頭に浮かぶ 1 つの方法は、何らかの方法で WebGrids Url を取得し、JQuery で更新することですが、現在の URL とパラメーターを取得する方法が見つかりませんか? 誰もこれを前に試しましたか?

更新:回答のおかげで、これが私が今頼っているものです:)

ajax 編集によって呼び出される ActionResult

[HttpPost]
public ActionResult EditUserDetails(User model)
{
    if (ModelState.IsValid)
    {
        // for the sake of brevity.

        // do your edit logic here and then on success you return:

        return Json(new { state = "success", id = "1", name = "John", surname = "Doe", etc = "blah" });
    }
    else
    {
        return Json(new { state = "failed", message="some error text here maybe?" });
    }
}

次に、編集をクリックすると、行のクラスが .editRowSelected に設定されます。(むしろこれをIDに変更します)

次に、Ajax Update Call の onSuccess:

function onSuccess(ajaxContext) {
    var result = eval(ajaxContext);
    if (result.state == "Success") {

        var row = $('.busyEditRow');
        row.html(content);

        $('.busyEditRow').removeClass('busyEditRow');
    }
    else {
        // Display some error stuffs here with the message - result.message
    }
}

これにより、グリッド行が新しいデータで更新されます:)

4

1 に答える 1

1

グリッド全体を更新してから、適用されたフィルターや現在のページなどをポストバックするのではなく、1 つのレコードを編集しただけで、1 人のユーザーのデータを含む部分ビューを返す関数をコントローラーに持つことになります。

DIV が閉じた後にこれを AJAX 経由で呼び出し、jQuery を使用してグリッド内の行を関数から返された HTML に置き換えることができます。

グリッド内の各行が ID で識別可能である限り、関連する行を簡単に見つけて置き換えることができます。

于 2012-07-04T15:31:46.393 に答える