我有一个CGridView的Wigdet像这样CCheckBoxColumn:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
array(
'class'=>'CCheckBoxColumn',
),
'title',
....
),
));
问:如何提交到控制器动作的检查值? 我知道我需要一个表单,提交按钮,但我需要一个明确的解释放在哪里的东西,所以就顶一下,搜索框出现。
提前致谢。
你并不绝对需要的另一种形式。 你可以只使用一个连接与连接到它额外的JavaScript。
为了得到检查的值,你可以调用javascript函数$.fn.yiiGridView.getChecked(containerID,columnID)
,看到这里 ,它返回一个包含ID的数组。
完整的示例(阿贾克斯):
您认为:
<?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
...
}
...
}
...
你也可以使用JSON字符串,而不是简单的字符串,我们路过AJAX(从视图)的数据,但随后而不是explode()
你可以使用json_decode()
控制器)。 此外,它会更好,以验证使用前/消毒的ID。
检查出的文档了CHtml :: ajaxLink了解更多关于Ajax的联系。
请注意该示例是有点粗,因为我还没有把在检查核对ID的空数组。
这其中的工作原理与CSRF保护和更新GridView控件。
<?php
echo CHtml::ajaxLink('ClickMe',Yii::app()->createUrl('controller/action'),
array(
'type'=>'POST',
'data'=>'js:{"ids" : $.fn.yiiGridView.getChecked("grid_view_id","check_box_id").toString(),"YII_CSRF_TOKEN" : "'.Yii::app()->request->csrfToken.'"}',
'success'=>"$('#grid_view_id').yiiGridView.update('grid_view_id')"
));
?>
如果你换你的GridView成一个简单的表格,你可以选择发送到价值checkboxs,
一个例子:
视图
<form id="frmSubmit">
<?php
echo CHtml::dropDownList('user_id'
, null
, CHtml::listData(User::model()->findAll(), 'USER_ID', 'FULLNAME')
);
echo CHtml::ajaxSubmitButton('Save'
, Yii::app()->createUrl('query/ajaxUpdate')
, array('success' => 'js:reloadGrid', )
, array('class' => 'btn btn-success'));
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'query-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'id' => 'query',
'class'=>'CCheckBoxColumn',
'selectableRows' => '2',
),
'Contact',
'Email',
'Company',
),
)); ?>
</form>
<script type="text/javascript">
function reloadGrid(data) {
$.fn.yiiGridView.update('query-grid');
}
</script>
调节器
public function actionAjaxUpdate()
{
var_dump($_POST);
}