从控制器渲染的视图具有一个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>
单击该链接时,将调用两次delete操作方法。此外,当Pjax在包含链接的视图(即嵌套视图)之外时,很难注意到此问题。由于这个问题,删除成功后的重定向无法正常工作,而是找到了404 not found错误(尝试两次删除相同的ID)。
如何解决双重重定向?
答案 0 :(得分:0)
您可以通过将以下属性添加到位于Pjax内的链接中来修复双重重定向:
data-pjax="0"
在我的情况下,我通过删除网格视图并将其替换为带有链接的ul来重用嵌套视图,并且当然忘记了在外部视图中删除不需要的Pjax。之后,问题出现了。很难注意到它两次调用了动作方法。