如何在Yii2的网格视图中创建一个选择(下拉列表)

How can i create a select (dropdown List) inside the gridview on Yii2

提问人:Zargathronax 提问时间:11/15/2023 更新时间:11/15/2023 访问量:25

问:

我尝试创建一个选择,以便稍后在ajax中发送所选值,我搜索了如何做到这一点,但我看到大多数情况下,选择必须用数据库中的数据填充,事实并非如此。我只需要用户选择两个值,我设法至少在视觉上创建了营地

网格视图中的字段

我设法用这段代码做到了:

                [
                    'attribute' => 'warehouse',
                    'label' => Yii::t('wms', 'Almacen'),
                    'vAlign' => 'middle',
                    'value' => function ($model) {
                        return Html::dropDownList('w.id', 'name', 
                        ['1' => 'Sym 1', 
                         '2' => 'Sym 2',
                        ], 
                        ['id' => 'Almacen', 'class' => 'form-control'
                    ]);
                    },
                    'format' => 'raw'
                ], 

但是在ajax上选择它的那一刻,它不取值:

                    $(keys).each(function(i, key) {
                        var order = parseInt($('tr[data-key=' + key + ']').find('.warehouse').html());
                        units.push({
                            key: key,
                            order: warehouse,
                            value: $('#pa-'+key).val()
                        })
                    }); 

这是一个快速的修复,但正如我所看到的那样,如果我从数据库调用它,我只能从 gridview 发送数据,但我可能错了,对 yii2 有点陌生,在这里做很多事情的方法很多。这不是一个搜索框,而是一个项目列表,人们可以在其中选择这些项目并将数据发送回去

php yii2

评论


答:

0赞 Davi Amaral 11/15/2023 #1

首先,请确保在 GridView 中正确生成下拉列表。您的代码对于这部分看起来不错,但如果 GridView 中有多行,您可能希望确保每个下拉列表都具有唯一的 id 属性,对吗?

尝试将下拉列表的 id 修改为每行的唯一值:

'value' => function ($model) {
    return Html::dropDownList('w.id', 'name', 
        ['1' => 'Sym 1', '2' => 'Sym 2'], 
        ['id' => 'Almacen-' . $model->id, 'class' => 'form-control']
    );
},

你也可以稍微改变你的 JavaScript,也许你需要调整选择器以正确定位下拉列表。

$(keys).each(function(i, key) {
    var warehouse = $('#Almacen-' + key).val();
    units.push({
        key: key,
        warehouse: warehouse,
        value: $('#pa-' + key).val() // Ensure this is correct
    });
});

您应该尝试确保您的 Ajax 请求被正确设置以将 units 数组发送到您的服务器。验证数据结构是否匹配。

同样在服务器端,尝试查看是否正确处理了传入的数据。这将取决于你的Yii2控制器是如何操作的。

在 JavaScript 中使用控制台日志,在 Yii2 应用程序中使用调试日志来跟踪问题可能发生的位置。

评论

0赞 Zargathronax 11/15/2023
感谢您的回答,我还有一个疑问:有没有其他方法可以生成该列表?我觉得问题出在功能上,但我没有找到其他方法
0赞 Davi Amaral 11/15/2023
你是说另一种在发球端生成函数的方法吗?