0

根据这篇文章,我制作了cgridview一列可编辑的更新数据。

只需一个按钮(更新许可证)即可更新 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错误不会出现在日志)。

public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        //array('pass', 'required'), //<----
4

1 回答 1

0
$model->save(false);

在不验证规则的情况下强制保存模型,而不是删除模型上的规则。

于 2013-08-22T10:59:28.663 回答