下拉列表数据

问题描述 投票:1回答:2

这是我的代码:

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

我只想要下拉状态列。如果记录处于活动状态或已取消激活,则将选择该记录

enter image description here

yii2 yii2-advanced-app yii2-basic-app
2个回答
2
投票

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

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

EDIT

在更改下拉列表时,您在初始要求中没有想要更新状态。您可以将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);

然后在您的GridView列中为status将下拉列表更改为以下内容

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'))
            ];
        }
    }
}

2
投票

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

[
    'attribute' => 'status',
    'content' => function ($model) {
       return Html::dropDownList('status', $model->status, ['10' => 'Active', '20' => 'Deactive']);
    },
],
© www.soinside.com 2019 - 2024. All rights reserved.