【问题标题】:yii2: Process selected rows of gridview not working - ajax post is emptyyii2:处理选定的gridview行不起作用-ajax帖子为空
【发布时间】:2015-05-27 17:15:31
【问题描述】:

在我的 yii2-app 中,我想将机器分配给机器组。机器的数量使得用户必须使用带有排序和过滤功能的 kartik-gridview(所有机器的列表)的复选框列来选择机器(普通的多选表单域不提供这些功能)。

为了处理选定的网格行,我只找到了一个使用 Javascript 的解决方案:http://www.yiiframework.com/forum/index.php/topic/53777-gridview-get-selected-colum/

我在我的按钮中实现了这个:

<?= Html::button(yii::t('app', 'Save'), ['class' => 'btn btn-primary', 
        'onclick' => "var keys = $('#w0.grid-view').yiiGridView('getSelectedRows');"
                    . "$.ajax({"
                    . "type: 'POST',"
                    . "url: 'http://localhost:8080/eddb1/frontend/web/index.php?r=machine-group/test',"
                    . "dataType: 'json',"
                    . "data: {keylist: keys}});"]) ?>

如您所见,我不得不使用$.ajax 而不是$.post,因为$.post 的url 不起作用,我总是得到404 not found-错误。

问题是,ajax-post 总是空的。按照控制器代码回显后请求:

public function actionTest()
{
        echo var_dump(Yii::$app->request->post());
        die();
}

我也试过了

echo var_dump($_POST);

同样的结果。 我在这里做错了什么?是否有可能在没有 Javascript 的情况下处理选定的行? - 我尝试将 gridview 放在 ActiveForm-Tags 中并使用正常的 submittButton,但没有发送后请求。

请大家帮忙,在这里卡了 2 天了...谢谢!!!

PS.:这是gridview-code:

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel'=>$searchModel,
    'columns' => [
        ['class' => 'kartik\grid\CheckboxColumn'],
        'company_name',
        'identifier',
        'licenceplate',
        'serial_number',
        'type_name',
        'class_name',
        'manufacturer',
        'model_name',
        'variant_name',
    ],
    'persistResize' => true,
    'showPageSummary' => false,
    'pjax' => true,
    'panel' => [
       'before' => ''
    ],
    'toolbar' => [
        '{export}',
        '{toggleData}'
    ]
]);  
?>

【问题讨论】:

  • 在 firefox/chrome 中使用 console.debug() 转储您的 keys var,确保其中确实有内容。我怀疑它会是空的。
  • 它是空的...但是为什么呢?

标签: javascript ajax gridview yii2


【解决方案1】:

已解决:问题是,“getSelectedRows”返回基于表的模型的主键。我的网格视图的数据提供者和搜索模型基于没有主键的 MySQL 视图,因此该函数总是返回一个空键数组。

必须使用 primaryKey-Function 在我的视图模型中设置 PK,用 GII 覆盖我的搜索模型,一切都运行良好(不要忘记将您的 PK 声明为数组,即使它是单个属性) .

【讨论】:

    【解决方案2】:

    您获取数据的选择器似乎是错误的,您可能想尝试以下操作:

    var keys = $(this).parents('.gridview').yiiGridView('getSelectedRows');
    

    这有一个额外的优势,即它不会链接到不断变化的标识符。 w0-part 由Widget-功能中的计数器创建,如果您碰巧在GridView 之前有其他小部件,则可以更改。所以在这种情况下,我会尽量避免匹配 ID。

    【讨论】:

    • 嗨 Blizz,我使用的选择器似乎是正确的。使用您的代码,我总是会收到错误消息:“TypeError:数据未定义”。我和不同的父母一起尝试过......同样的错误。这是网格的 HTML 标记:
      。原始代码通过运行,但 ajax-post 始终为空。还有其他想法吗???
    • 选择器错误...您正在选择一个 ID,但在名称中包含一个类。您可以选择 ID 或班级。两者都不起作用。它正在寻找一个不存在的 id 为 w0.grid-view 的元素,因此关于 data() 的评论不存在。
    • 嗨 Blizz,我不知道我是否用错误的方式表达自己:如果我使用 w0.grid-view 或仅 w0 结果是一样的:代码运行通过但我的响应控制器为空(因此 ajax-post 为空)。您上面的代码不起作用:“TypeError: data is undefined”
    • 首先我们需要您的yiiGridView('getSelectedRows')-call 的结果来返回数据。我的直觉告诉我它与选择器有关,但我可能会离开。如果您单独调试输出选择器 ($('#w0')),是否会产生正确的 div
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签