You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kartik DetailView内联编辑失效,数据无法更新求助

解决Kartik DetailView内联编辑无法编辑及提交失败的问题

我帮你排查了代码里的问题,主要集中在视图字段配置冲突和控制器响应逻辑适配上,具体解决方案如下:


1. 视图配置的核心问题:误锁了编辑权限

你在几乎所有字段里都加了displayOnly => true,这个属性会强制字段仅展示,完全锁死编辑功能——哪怕你开启了enableEditMode也没用!另外mode => 'edit'已经是默认进入编辑模式,enableEditMode可以不用重复设置。

修正后的关键视图代码:

<?php echo DetailView::widget([ 
    'model' => $modelAnagrafiche, 
    'responsive' => true, 
    // 用常量更规范,直接默认进入编辑模式
    'mode' => DetailView::MODE_EDIT, 
    'buttons1' => '{update}', 
    'panel' => [ 
        'type' => 'primary', 
        'heading' => 'Contratto' . ' : ' . $modelAnagrafiche->cognome_ragione_sociale . ' ' . $modelAnagrafiche->nome 
    ], 
    'attributes' => [ 
        [ 
            'group'=>true, 
            'label'=>'Sezione Anagrafica', 
            'rowOptions'=>['class'=>'table-primary'] 
        ], 
        [ 
            'columns' => [ 
                [ 
                    'attribute' => 'cognome_ragione_sociale', 
                    // 要编辑就删掉这行,要只读就保留
                    // 'displayOnly' => true, 
                    'valueColOptions' => ['style' => 'width:30%'] 
                ], 
                [ 
                    'attribute' => 'nome', 
                    'format' => 'raw', 
                    'valueColOptions' => ['style' => 'width:30%'], 
                    // 必须移除displayOnly,否则无法激活编辑框
                    // 'displayOnly' => true, 
                    'type' => DetailView::INPUT_TEXT, 
                ], 
            ], 
        ], 
        // 其他字段同理:把需要编辑的字段的displayOnly属性删掉
        [ 
            'columns' => [ 
                [ 
                    'attribute' => 'codice_fiscale', 
                    // 'displayOnly' => true, 
                    'valueColOptions' => ['style' => 'width:30%'] 
                ], 
                [ 
                    'attribute' => 'partita_iva', 
                    'format' => 'raw', 
                    'valueColOptions' => ['style' => 'width:30%'], 
                    // 'displayOnly' => true 
                ], 
            ], 
        ], 
        // ... 剩下的属性配置都按这个逻辑调整
    ], 
]); ?>

2. 控制器Action适配AJAX提交

Kartik DetailView的内联编辑默认是AJAX异步提交,你的当前Action是直接跳转页面,可能和组件的预期不符,容易导致提交无响应。建议调整成支持AJAX的版本:

public function actionUpdateAnagrafica() { 
    $post = Yii::$app->request->post(); 
    if (empty($post['Anagrafiche']['id'])) { 
        throw new NotFoundHttpException('Non esiste nessuna anagrafica.'); 
    } 
    $modelAnagrafiche = Anagrafiche::findOne($post['Anagrafiche']['id']); 
    
    // 处理AJAX提交
    if (Yii::$app->request->isAjax && $modelAnagrafiche->load($post) && $modelAnagrafiche->save()) {
        return Json::encode(['success' => true, 'message' => 'Dati aggiornati correttamente']);
    } 
    // 处理普通请求
    elseif ($modelAnagrafiche->load($post) && $modelAnagrafiche->save()) { 
        return $this->redirect(['view', 'id' => $modelAnagrafiche->id]); 
    } else { 
        // AJAX请求失败返回错误信息
        if(Yii::$app->request->isAjax){
            return Json::encode(['success' => false, 'errors' => $modelAnagrafiche->errors]);
        }
        return $this->render('update-anagrafica', [ 
            'modelAnagrafiche' => $modelAnagrafiche, 
        ]); 
    } 
}

3. 最后还要检查这两项

  • 确认你的Anagrafiche模型里,需要编辑的字段都在rules()里配置了safe()或者具体验证规则,不然load($post)会加载失败,数据也保存不了。
  • 检查页面是否加载了Kartik组件需要的JS/CSS资源(正常情况下组件会自动注册,但自定义布局可能会遗漏)。

内容的提问来源于stack exchange,提问作者Angelo De Giacomo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:02:40