【发布时间】:2013-08-22 09:59:10
【问题描述】:
我创建了一个cgridview,其中有一列可编辑用于更新数据,based on this post。
只需一个按钮(更新许可证)即可更新 ajax 调用中的所有字段。
但它只更新第一个字段。
我认为$_POST 变量上发生了一些事情。
我尝试了几种方法来查看循环 $_POST 变量失败。
我的代码:
查看:
<?php $form=$this->beginWidget('CActiveForm', array(
'enableAjaxValidation'=>true,
)); ?>
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'rta-client-grid',
'selectableRows'=>1,
'selectionChanged'=>'mostrarDetalles', // via 1: para mostrar detalles al seleccionar
'dataProvider'=>$modelClient->search(),
'filter'=>$modelClient,
'columns'=>array(
array(
'id'=>'autoId',
'class'=>'CCheckBoxColumn',
'selectableRows' => '50',
),
'oid',
'name',
'surname',
'id_country',
'nif',
//'CifDni',
array(
'name'=>'CifDni',
'type'=>'raw',
'value'=>'CHtml::textField("CifDni[$data->oid]",$data->CifDni,array("style"=>"width:80px;"))',
//
),
array(
'class'=>'CButtonColumn',
),
array(
'class'=>'CButtonColumn',
'template' => '{detallarClientes}',
'buttons' => array(
'detallarClientes'=>array(
'label'=>'ver',
'imageUrl'=>'images/demo1/view.png',
'click'=>'js:mostrarDetalles',
),
),
),
),
)); ?>
<script>
function reloadGrid(data) {
$.fn.yiiGridView.update('rta-client-grid');
}
</script>
<?php echo CHtml::ajaxSubmitButton('Filter',array('rtaClient/ajaxupdate'), array(),array("style"=>"display:none;")); ?>
<?php echo CHtml::ajaxSubmitButton('Update licencias',array('rtaClient/ajaxupdate','act'=>'doUpdateLicencia'), array('success'=>'reloadGrid'),array("style"=>"float:right;")); ?>
<?php $this->endWidget(); ?>
控制器:
public function actionAjaxupdate()
{
$act = $_GET['act'];
if($act=='doUpdateLicencia')
{
$sortOrderAll = $_POST['CifDni'];
if(count($sortOrderAll)>0)
{
foreach($sortOrderAll as $menuId=>$sortOrder)
{
$model=$this->loadModel($menuId);
$model->CifDni = $sortOrder;
$model->save();
}
}
}
}
在 FirebugConsole 上发布变量:
CifDni[10] H
CifDni[11] I
CifDni[12] J
CifDni[2] A
CifDni[3] B
CifDni[4] C
CifDni[6] D
CifDni[7] E
CifDni[8] F
CifDni[9] G
RtaClient[CifDni]
RtaClient[id_country]
RtaClient[name]
RtaClient[nif]
RtaClient[oid]
RtaClient[surname]
我刚刚解决了这个问题。我修改了控制器添加:
foreach($_POST as $id=>$value)
{
if($id=="CifDni") {
foreach($value as $id2=>$value2)
{
$model=$this->loadModel($id2);
$model->CifDni = $value2;
$model->save();
}
}
}
但是base中的问题出在其他具有“必需”规则的字段(未显示在网格上)并且在数据库中没有值,并且它们不允许我通过 SQL 错误进行更新(sql 错误不要' t 出现在日志中)。
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
//array('pass', 'required'), //<----
【问题讨论】:
-
在您的情况下,这是否意味着 oid=10(第一个)的记录将被更新但 oid=11,12,....2,3,4 没有?跨度>
-
嗨@TelvinNguyen,我刚刚解决了这个问题。我在数据表和模型上的规则。
标签: ajax forms yii http-post cgridview