1

CButtonColumn クラスのデフォルトの [削除] ボタンのコントローラーを見ています。最初のページに移動するのではなく、CGridView の行を削除した後、以前の Web ページに戻り、CGridView の同じページに留まります。関連するコントローラーでこれを担当する行は次のようです。

if (!isset($_GET['ajax'])) $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));

この動作 (ページネーションをページ 1 にリセットせずに前のビューに戻る) を持つ新しいカスタム ボタンを作成したいのですが、上記のコード行をボタンの関連するアクションに含めるだけではうまくいきません。どうにかしてその「returnUrl」パラメーターを送信する必要があると思いますが、方法がわかりません:)

4

2 に答える 2

1

あなたが見ている「returnUrl」コードは、returnUrl に POST 変数を使用しています。これを使用するには、何らかの形で POST する必要があります。ビューでは、このコードが呼び出されます<input name="returnUrl">。フォームにフィールドがあると想定しています。コントローラ アクションで POST 変数にアクセスするには、このフィールド (正しい URL 値が入力されている) が POST を実行しているすべてのビューにあることを確認する必要があります。

AJAX 経由で deleteAction に POST する場合は、 jQuery の AJAX関数$_POST['returnUrl']で変数を設定できると思います。

別の方法は、この POST 変数の代わりにCWebUser の returnUrl SESSION 変数を使用することです。私はこれをやったことがありませんが、Yii に組み込まれているので、問題なく動作すると思います。

$_POST['returnUrl']いずれにせよ、私はGii が生成するハッキーがあまり好きではありませんでした。

おそらくできるもう1つのことは、変数を見て、$_SERVER['HTTP_REFERER']それをdeleteActionのリターンリダイレクトに使用することです。ただし、Yii が行う 302 リダイレクト/書き換えによる複雑さで、それが正しく設定されるかどうかはわかりません。

幸運を!

于 2011-03-16T15:07:12.047 に答える
1

CHtml::link 呼び出しを介してリターン URL を設定できます。これは削除を使用した例です

CHtml::link(
    'Delete',
    '#',
     array('submit'=>array('delete','id'=>$model->id),
           'params'=>('returnUrl'=>'controller/action...'), 
           'confirm' => 'Are you sure?'
     )
);

このStackoverflowの回答から引き出されました。

于 2012-09-14T18:35:45.030 に答える