单击 link 时,Yii2 删除操作被调用两次

Yii2 delete action is called twice when the link is clicked

从控制器呈现的视图具有 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>

嵌套视图里面有一个删除问题link:

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

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

如何修复双重重定向?

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

data-pjax="0"

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