在我的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
的网址没有用,我总是找不到 404 < /强> -error。
问题是,ajax-post总是空的。按照控制器代码回显后请求:
public function actionTest()
{
echo var_dump(Yii::$app->request->post());
die();
}
我也尝试了
echo var_dump($_POST);
同样的结果。 我在这做错了什么?没有Javascript可以处理选定的行吗? - 我尝试将gridview放在 ActiveForm -Tags内,并使用普通的 submittButton ,但没有发送请求。
请任何帮助,现在被困在这里2天...... thx !!!
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}'
]
]);
?>
答案 0 :(得分:1)
解决:问题是,“getSelectedRows”返回基于表的模型的主键。我对gridview的dataprovider和searchmodel是基于没有主键的MySQL-View,所以函数总是返回一个空键数组。
必须使用primaryKey-Function在我的视图模型中设置PK,用GII覆盖我的searchmodel并且一切运行正常(不要忘记将PK声明为数组,即使它是单个属性)
答案 1 :(得分:0)
似乎你的选择器获取数据是错误的,你可能想尝试类似的东西:
var keys = $(this).parents('.gridview').yiiGridView('getSelectedRows');
这具有额外的优点,即它没有链接到更改的标识符。 w0
- 部分由Widget
- 功能中的计数器创建,如果您在GridView
之前碰巧有其他小部件,则可以更改。所以在这种情况下我会尝试避免匹配ID。