这里有一些问题,但问题出在 gridview 中的过滤器中。
我的问题是我无法将外部表单与 gridview 本身集成,因为我不想使用属于 gridview 的搜索表单。
控制器
public function actionIndex()
{
$searchModel = new BlogSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
Run Code Online (Sandbox Code Playgroud)
视图 index.php
<?= Html::button('Filter', ['data-toggle' => 'modal', 'data-target' => '#filter-modal', 'class' => 'btn btn-primary']) ?>
<?php
Modal::begin([
'header' => '<h3>Search Blog</h3>',
'id' => 'filter-modal'
]);
echo $this->render('_search', ['model' => $searchModel]);
Modal::end();
?>
<?php Pjax::begin(); ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
'title',
'content'
]
]); ?>
<?php Pjax::end(); ?>
Run Code Online (Sandbox Code Playgroud)
_search.php
<?php $form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
]); ?>
<?= $form->field($model, 'title') ?>
<?= $form->field($model, 'content') ?>
<div class="form-group">
<?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
Run Code Online (Sandbox Code Playgroud)
在“index.php”中,gridview 在 pjax 内部,但搜索表单在外部,但即使表单在“Pjax :: begin”中,它也不起作用。
也就是说,当我进行搜索时,页面会重新加载。我只想更新 gridview。
据我从讨论中了解到,您不想使用里面的过滤器字段GridView,而是想使用搜索表单来过滤GridView. 如果这是正确的,您需要为此做两件事
1.将你的表格移到pjax方块内
index.php
<?= Html::button('Filter', ['data-toggle' => 'modal', 'data-target' => '#filter-modal', 'class' => 'btn btn-primary']) ?>
<?php Pjax::begin(['enablePushState'=>false]); ?>
<?php
Modal::begin([
'header' => '<h3>Search Blog</h3>',
'id' => 'filter-modal'
]);
echo $this->render('_search', ['model' => $searchModel]);
Modal::end();
?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
'title',
'content'
]
]); ?>
<?php Pjax::end(); ?>
Run Code Online (Sandbox Code Playgroud)
2.第二个最重要的事情是data-pjax在表单选项中包含选项。
_search.php
<?php $form = ActiveForm::begin([
'action' => ['index'],
'id'=>'my-form',
'method' => 'get',
'options' => [
'data-pjax' => 1
],
]); ?>
<?= $form->field($model, 'title') ?>
<?= $form->field($model, 'content') ?>
<div class="form-group">
<?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
Run Code Online (Sandbox Code Playgroud)
编辑
您可能会发现模态覆盖停留在那里并且模态窗口本身隐藏的问题,为您的表单提供一个id赞 id=>"my-form"并在您的_search.php文件中添加以下内容以绑定beforeSubmit事件ActiveFormJS
$this->registerJs('$("#my-form").on("beforeSubmit", function (e) {
$("#filter-modal").modal("hide");
});', \yii\web\View::POS_READY);
Run Code Online (Sandbox Code Playgroud)