yii2:处理选定的 gridview 行不起作用 - ajax post 为空
yii2: Process selected rows of gridview not working - ajax post is empty
在我的 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 未找到-错误。
问题是,ajax-post 总是空的。按照控制器代码回显 post-请求:
public function actionTest()
{
echo var_dump(Yii::$app->request->post());
die();
}
我也试过
echo var_dump($_POST);
同样的结果。
我在这里做错了什么?是否可以在没有 Javascript 的情况下处理选定的行? - 我试图将 gridview 放入 ActiveForm-Tags 并使用正常的 submittButton 但没有发送 post-请求。
请帮忙,现在卡在这里 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}'
]
]);
?>
您获取数据的选择器似乎有误,您可能想尝试类似的方法:
var keys = $(this).parents('.gridview').yiiGridView('getSelectedRows');
这有一个额外的好处,即它不链接到不断变化的标识符。 w0
部分由 Widget
功能中的计数器创建,如果您碰巧在 GridView
之前有其他小部件,则可以更改。所以在这种情况下我会尽量避免匹配 ID。
已解决:问题是 "getSelectedRows" returns 基于 table 的模型的主键。我的 gridview 数据提供者和搜索模型基于没有主键的 MySQL-View,因此该函数总是返回一个空键数组。
必须使用 primaryKey-Function 在我的视图模型中设置主键,用 GII 覆盖我的搜索模型,一切正常 运行(不要忘记将主键声明为数组,即使它是一个单一的属性)。
在我的 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 未找到-错误。
问题是,ajax-post 总是空的。按照控制器代码回显 post-请求:
public function actionTest()
{
echo var_dump(Yii::$app->request->post());
die();
}
我也试过
echo var_dump($_POST);
同样的结果。 我在这里做错了什么?是否可以在没有 Javascript 的情况下处理选定的行? - 我试图将 gridview 放入 ActiveForm-Tags 并使用正常的 submittButton 但没有发送 post-请求。
请帮忙,现在卡在这里 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}'
]
]);
?>
您获取数据的选择器似乎有误,您可能想尝试类似的方法:
var keys = $(this).parents('.gridview').yiiGridView('getSelectedRows');
这有一个额外的好处,即它不链接到不断变化的标识符。 w0
部分由 Widget
功能中的计数器创建,如果您碰巧在 GridView
之前有其他小部件,则可以更改。所以在这种情况下我会尽量避免匹配 ID。
已解决:问题是 "getSelectedRows" returns 基于 table 的模型的主键。我的 gridview 数据提供者和搜索模型基于没有主键的 MySQL-View,因此该函数总是返回一个空键数组。
必须使用 primaryKey-Function 在我的视图模型中设置主键,用 GII 覆盖我的搜索模型,一切正常 运行(不要忘记将主键声明为数组,即使它是一个单一的属性)。