yii2 - 在模态窗口内使用带有gridview的pjax

时间:2017-08-31 15:37:13

标签: gridview yii2 modal-dialog pjax

我试图在模态对话框中使用gridView,但是当我在其中搜索某些内容(过滤)时,所有页面刷新并且显然模式关闭。 我需要使它正常工作?。

我的代码:

视图

use yii\widgets\Pjax;

<?php
    Modal::begin([
        'id' => 'modal',
        'header' => '<h2>Students</h2>',
        'toggleButton' => ['label' => 'Show Students'],
    ]);
    Pjax::begin();
    echo GridView::widget([
            'dataProvider' => $dataProvider,
            'filterModel' => $searchModel,
            'columns' => [
                'student_code',
                'name',
                'grade',
            ],
         ]);
    Pjax::end();
    Modal::end();
?>

控制器

public function actionDetail($id)
    {
        $model = $this->findModel($id);

        $searchModel = new DatosBasicosSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);       

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('detail', [
                'model' => $model,
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,
            ]);
        }
    }

我搜索了官方网页上的文档和教程,我找到了很多相关的帖子,但我无法解决问题。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

尝试将pjax配置添加到GridView

'pjax' => true,
'pjaxSettings'=>[
    'options'=>[
        'enablePushState'=>false,
    ],
],

为GridView渲染创建一个单独的动作并触发过滤器......和configure filterUrl

答案 1 :(得分:1)

问题是由Pjax的begin()方法配置引起的,正确的方法是:

查看代码:

use yii\widgets\Pjax;

<?php
    Modal::begin([
        'id' => 'modal',
        'header' => '<h2>Students</h2>',
        'toggleButton' => ['label' => 'Show Students'],
    ]);

    Pjax::begin([
        'id'=>'pjax-students-gridview',
        'timeout' => false,
        'enablePushState' => false,
    ]);

    echo GridView::widget([
            'dataProvider' => $dataProvider,
            'filterModel' => $searchModel,
            'columns' => [
                'student_code',
                'name',
                'grade',
            ],
         ]);

    Pjax::end();

    Modal::end();
?>

控制器代码是一样的,没有问题。

感谢 vityapro 带我走上正轨。