CGridView 删除数据后有时候我想跳转到其他的动作去,而不是刷新数据。请问可以吗?
CGridView 删除数据后有时候我想跳转到其他的动作去,而不是刷新数据。请问可以吗?
你可以自定义一个按钮,比如我要定义一个delete按钮
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'category-grid',
'dataProvider'=>$model->search(),
'columns'=>array(
'id',
'name',
array(
'class'=>'CButtonColumn',
'buttons' => array(
'delete'=>array(
'label'=>'删除',
'url'=>'array("category/delete","id"=>$data->id)',
'imageUrl'=>Yii::app()->request->baseUrl.'/css/delete.gif',
),
),
'template'=>'{update} {delete}',
),
),
)); ?>
然后你在category/delete这个动作里执行完删除操作后转到你想要跳转的页面!
我这里的方法其实是不用ajax删除,如果有其它好方法也请你告诉我啊!
我是又想ajax又想删除后可以控制是否跳转。
那你是想局部跳转?如果整页面跳转的话,那用不用ajax是无所谓的,效果一样!
这样描述一下吧。应该会更清晰我的需求:
比如我有一个订单和订单明细。查看订单时可以同时查看订单的明细。如果订单为新增状态时是可以对明细进行操作的,包括删除操作。明细的显示利用的是 CGridView 来展示的。那么我在删除明细的时候,如果我有三条明细的数据,删除第一条的时候,刷新的是明细的 gridview 内容部分,但是我在删除第三条明细数据的时候,因为明细数据全部删除了,那么对应的订单已经无明细数据量,则我要同时删除明细对应的订单。这个时候,删除成功后,我要跳转到订单的展示页面,也就是 orders/index 的页面。
综上所叙,在删除明细的时候,我会根据一定的条件判断是刷新明细的 gridview 还是直接跳转到订单的 index 控制器。
当然,明细的展示不一定需要 gridview 来展示,直接写也是可以的,利用他只是更加方便一点而已。但目前遇到的问题是利用 gridview 的 delete 之后不能直接跳转到其他的控制器动作。
$this->widget(‘zii.widgets.grid.CGridView’, array(
'afterAjaxUpdate'=>"
function(id,data){
var d=$('#'+id)
if(d.find('.empty').html() != null){
window.location.href='index.php';
}
}",
给CGridView加个js参数就可以了,详细内容用firebug看下就明白了,我试过没问题的,跳转的时候,效果有点不好
我觉得在服务器端查询一下该订单下是否还有有效订单,然后用ajax返回,间断一下是否为0,然后跳转。在页面上用javascript判断节点内容感觉不太放心。
嗯。使用这个搞定。呵呵。非常感谢。
不错!学习了!
直接修改 delete的templet吧。不使用它的ajax,删除后redirect。