0

从控制器呈现的视图具有 Pjax 开始和结束标记:

Pjax::begin([
    'id' => 'pjax-questions-list',
    'enablePushState' => false,
    'clientOptions' => [
        'method' => 'get'
    ],
]);

在 Pjax 内部,它呈现两个嵌套视图:

<div class="body">
  <?php
      echo $this->render('_questions_search', ['model' => $searchModel, ' questionary' => $questionary]);
      echo $this->render('_questions_list', ['dataProvider' => $dataProvider, 'model' => $searchModel]);
  ?>
</div>

在嵌套视图中有一个删除问题链接:

<li>
  <a class="waves-effect waves-block" data-pjax="0"
     href="<?= Url::to(['question/delete', 'id' => $model->id]) ?>">Delete</a>
</li>

单击该链接时,将调用两次删除操作方法。此外,当 Pjax 位于包含链接的视图(即嵌套视图)之外时,很难注意到这个问题。由于这个问题,成功删除后的重定向不起作用,而是发现 404 not found 错误(尝试删除相同的 id 两次)。

如何修复双重重定向?

4

1 回答 1

0

您可以通过将以下属性添加到位于 Pjax 内的链接来修复双重重定向:

data-pjax="0"

在我的情况下,我通过删除网格视图并将其替换为带有链接的 ul 来重用嵌套视图,当然忘记删除外部视图中不需要的 Pjax。之后问题就出现了。很难注意到它两次调用了 action 方法。

于 2018-10-01T14:42:54.380 回答