【问题标题】:Yii2 Grdiview Checkbox column submit via FormYii2 Gridview Checkbox 列通过表单提交
【发布时间】:2017-10-05 08:49:39
【问题描述】:

在我的 yii2 项目中,我有一个带有简单复选框列的 gridview。

<?= 
GridView::widget([
    'id' => 'gridwithcheckboxes',
    'dataProvider' => $dataProvider,
    'columns' => [
        ['attribute' => 'a', 'value' => 'tabfora.a'],
        ['attribute' => 'b', 'value' => 'tabforb.b'],
        'user',
        'mobile',
        'description',
        ['class' => 'yii\grid\CheckboxColumn'],
    ],
]);

?>

我知道我可以通过这个 js 助手获取复选框值:

var keys = $('#gridwithcheckboxes').yiiGridView('getSelectedRows');

有没有一种方法可以将它们通过表单提交传递给控制器​​操作,而不是使用 javascript?

感谢大家的帮助。

【问题讨论】:

  • 我猜你已经在控制器中尝试var_dump(Yii::$app-&gt;request-&gt;post());
  • 你可以使用 AJAX 传递这个值

标签: checkbox yii2


【解决方案1】:

我这样解决这个问题。

创建链接,您将在其中添加您检查的行的 ID。

 <a href="" class="btn btn-info" target="_blank" id="exampleButton" data-pjax=false>Button</a>

然后在页面底部注册一个 javascript 操作,点击复选框即可更新链接的 href。

<?php 
$this->registerJs(' 
$(document).on("ready pjax:success", function() {
    $(".kv-row-checkbox").change(function(){
        var keys = $("#gridwithcheckboxes").yiiGridView("getSelectedRows");
        var keysJson = JSON.stringify(keys);
        $("a[id=\"exampleButton\"]").attr("href", "name-of-action?keys="+keysJson);
    });
    $(".select-on-check-all").change(function(){
        var keys = $("#gridwithcheckboxes").yiiGridView("getSelectedRows");
        var keysJson = JSON.stringify(keys);
        $("a[id=\"exampleButton\"]").attr("href", "name-of-action?keys="+keysJson); 
    });
});
',View::POS_READY);
?>

.kv-row-checkbox 和 .select-on-check-all 是复选框的类,你必须检查你的是否不同。

在控制器中

public function actionNameOfAction($keys)
{

        // decoding
        $keys = json_decode($keys);
        // Operation with ids
        ......
}

【讨论】:

  • hi tigrasti,感谢您的回复,但我正在寻找一种不暗示使用js的方法。
【解决方案2】:

我使用 gridview 小部件(包括常规 html 表单标签中的复选框列)通过 $_POST 传递选定的 ID。您需要使用value =Yii::$app-&gt;request-&gt;getCsrfToken() 进行隐藏输入,否则将不起作用。在控制器中,$_POST['selection] 是所选 id 的数组。

【讨论】:

    【解决方案3】:

    通过表单实现它的唯一方法实际上是用表单包装 gridview。表单应该在gridview 之前开始并在gridview 之后结束。您可以有一个或两个提交按钮。 这并不意味着您不能根据需要使用 ajax。

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多