你并不绝对需要另一种形式。您可以只使用附加了附加 javascript 的链接。
要获取检查的值,您可以调用 javascript 函数$.fn.yiiGridView.getChecked(containerID,columnID)
,请参见此处,它返回一个包含 id 的数组。
完整示例(使用 ajax):
在您看来:
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'example-grid-view-id', // the containerID for getChecked
'dataProvider'=>$dataProvider,
'columns'=>array(
array(
'class'=>'CCheckBoxColumn',
'id'=>'example-check-boxes' // the columnID for getChecked
),
'title',
....
),
));
?>
<div id="for-link">
<?php
echo CHtml::ajaxLink('SomeLink',Yii::app->createUrl('somecontroller/someaction'),
array(
'type'=>'POST',
'data'=>'js:{theIds : $.fn.yiiGridView.getChecked("example-grid-view-id","example-check-boxes").toString()}'
// pay special attention to how the data is passed here
)
);
?>
<div>
在您的控制器中:
...
public function actionSomeaction(){
if(isset($_POST['theIds'])){
$arra=explode(',', $_POST['theIds']);
// now do something with the ids in $arra
...
}
...
}
...
您也可以在我们通过 ajax 传递的数据中(从视图中)使用 json 字符串,而不是简单的字符串,但是explode()
您将使用json_decode()
(在控制器中)而不是 . 此外,最好在使用前验证/清理 id。
查看CHtml::ajaxLink的文档以了解有关 ajax 链接的更多信息。
请注意,该示例有点粗略,因为我没有检查已检查 id 的空数组。