我正在查看控制器以获取CButtonColumn类中的默认“删除”按钮。它设法在删除CGridView行后返回到上一个网页,并保留在CGridView的同一页面上,而不是转到第一页。相关控制器中负责此操作的行似乎是:
if (!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
我想创建一个具有此行为的新自定义按钮(即返回到上一个视图而不将页面重置为第1页),但只是在按钮的相关操作中包含上面的代码行并不能解决问题。我想我需要以某种方式发送'returnUrl'参数,但我无法弄清楚如何:)
答案 0 :(得分:1)
您正在查看的'returnUrl'代码使用POST变量作为returnUrl。要使用它,您需要以某种方式POST。在View上调用此代码我假设表单中有<input name="returnUrl">
字段。您应该确保此字段(填充了正确的URL值)在您要发布的所有视图上,以便在Controller操作中访问该POST变量。
如果您通过AJAX发布到deleteAction,我认为您可以使用jQuery AJAX函数设置$_POST['returnUrl']
变量。
另一种方法可能是使用CWebUser's returnUrl SESSION变量而不是此POST变量。我从来没有这样做过,但它是内置于Yii所以我认为它可以正常工作。
我从来没有真正喜欢Gii生成的hacky $_POST['returnUrl']
。
你可以做的另一件事是查看$_SERVER['HTTP_REFERER']
变量,并将其用于deleteAction中的返回重定向。我不知道是否会设置正确,但是由于Yii所做的302重定向/重写的复杂性。
答案 1 :(得分:1)
您可以通过CHtml :: link调用设置返回网址。以下是使用删除
的示例CHtml::link(
'Delete',
'#',
array('submit'=>array('delete','id'=>$model->id),
'params'=>('returnUrl'=>'controller/action...'),
'confirm' => 'Are you sure?'
)
);
从this Stackoverflow回答。