我正在查看CButtonColumn类中缺省删除按钮的控制器。在删除CGridView行之后,它设法返回到前一个网页,并保持在CGridView的同一页上,而不是转到第一页。在关联的控制器中,负责此操作的行似乎是:
if (!isset($_GET['ajax'])) $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
我想创建一个具有此行为的新自定义按钮(即返回到上一个视图,而不将分页重置为页面1),但仅在按钮的相关操作中包含上述代码行并不起作用。我想我需要以某种方式发送'returnUrl‘参数,但我不知道如何发送:)
发布于 2011-03-16 23:07:12
您正在查看的' returnUrl‘代码为returnUrl使用了一个POST变量。要使用它,你需要以某种方式发布它。在视图中,这段代码是从我假设表单中有一个<input name="returnUrl">字段中调用的。您应该确保这个字段(填充了正确的URL值)出现在您要POSTing的所有视图上,以便在控制器操作中访问该POST变量。
如果您通过AJAX使用POSTing连接到deleteAction,我认为您可以使用jQuery AJAX函数设置$_POST['returnUrl']变量。
另一种方法可能是使用CWebUser's returnUrl会话变量而不是此POST变量。我从来没有这样做过,但它是Yii内置的,所以我认为它工作得很好。
无论如何,我从来没有真正喜欢过Gii生成的$_POST['returnUrl']。
您可以做的另一件事可能是查看$_SERVER['HTTP_REFERER']变量,并将其用于deleteAction中的返回重定向。不过,我不知道这是否会被正确设置,因为Yii所做的302重定向/重写带来了复杂性。
祝好运!
发布于 2012-09-15 02:35:45
您可以通过CHtml::link调用来设置返回url。下面是一个使用delete的示例
CHtml::link(
'Delete',
'#',
array('submit'=>array('delete','id'=>$model->id),
'params'=>('returnUrl'=>'controller/action...'),
'confirm' => 'Are you sure?'
)
);从this堆栈溢出答案中提取。
https://stackoverflow.com/questions/5312434
复制相似问题