列表数据下拉

时间:2018-09-05 11:03:01

标签: yii2 yii2-advanced-app yii2-basic-app

这是我的代码:

[
    'attribute' => 'status',
    'value' => function ($model) {
        return Html::dropDownList('status', ['10' => 'Active', '20' => 'Deactive']);
    },
],

我只想在状态列中下拉菜单。如果记录处于活动状态或非活动状态,则将其选中。

enter image description here

2 个答案:

答案 0 :(得分:2)

使用content属性呈现HTML元素。例如:

[
    'attribute' => 'status',
    'content' => function ($model) {
       return Html::dropDownList('status', $model->status, ['10' => 'Active', '20' => 'Deactive']);
    },
],

答案 1 :(得分:2)

您需要对列选项使用'format' => 'raw',并且对dropDownList()的定义是错误的,您需要将选择字符串作为第二个参数并将下拉选项作为第三个参数。将您的代码更改为以下代码:

[
    'attribute' => 'status',
    'format' => 'raw',
    'value' => function ($model) {
        return Html::dropDownList('status', $model->status, ['10' => 'Active', '20' => 'Deactive']);
    },
],

编辑

当下拉列表更改时,您最初也没有想要更新状态的要求。您可以将ajax调用绑定到下拉菜单。

在要初始化GridView的视图上方添加以下javascript。

注意:将ajax调用中的url:'controller/update-status?id'+id更改为要更新行状态的相对控制器,但不要删除id

$js = <<<JS
        $(document).on('ready pjax:success',function(){
            $(".switch-status").on('change',function(){
                var data={};
                data[$(this).attr("name")]=$(this).val();
                var id=$(this).closest("tr").data('key');
                $.ajax({
                    method:'post',
                    url:'/controller/update-status?id='+id,
                    data:data,
                    success:function(data){
                        if(!data.success){
                            alert(data.message);
                        }else{
                            alert("Status updated.");
                        }
                    },
                    error:function(jqXHR, textStatus, errorThrown ){
                        alert(errorThrown);
                    }
                });
            });
        });
JS;
$this->registerJs($js, yii\web\View::POS_END);

然后在status的GridView列中,将下拉菜单更改为以下内容

return Html::dropDownList(Html::getInputName($model, 'active'), $model->active, [10 => 'Active', 20 => 'Deactive'], ['class' => 'switch-status']);

然后转到您的控制器并添加用于更新状态的操作代码

注意:用您正在使用的相应模型更改第一行Model名称中的$model = Model::findOne($id);

public function actionUpdateStatus($id) {
    $model = Affiliate::findOne($id);
    $app = Yii::$app;
    $request = $app->request;

    if($request->IsAjax && $request->isPost) {

        Yii::$app->response->format = Response::FORMAT_JSON;

        if($model->load($request->post()) && $model->save()) {
            return ['success' => true];
        } else {
            return [
                'success' => false,
                'message' => implode('<br />', ArrayHelper::getColumn($model->errors, '0'))
            ];
        }
    }
}