【问题标题】:Yii2 - Pass ActiveDataProvider from View to another controllerYii2 - 将 ActiveDataProvider 从视图传递到另一个控制器
【发布时间】:2016-02-03 14:47:48
【问题描述】:

我有一个带有显示日期相关项目列表的 GridView 的索引视图。我在该视图上还有另一个链接,我打算填充一个日历小部件,显示日历而不是表格上的所有行项目。

用户可能设置了一个或多个过滤器。如何将进入视图的 ActiveDataProvider 变量传递给另一个操作,以便我可以填充日历小部件。

编辑:

目前我测试如下:

查看:

<?= Html::a('Test', ['calendar', 'dataProvider' => $dataProvider], [ 'class' => 'btn btn-primary', ]) ?>

控制器:

public function actionCalendar($dataProvider)
    {
        print_r($dataProvider->getModels());die("");
    }

我收到一个错误...

错误请求 (#400)

为参数“dataProvider”接收到无效数据。

【问题讨论】:

    标签: gridview controller yii2 parameter-passing action


    【解决方案1】:

    在控制器中你可以使用重定向

    return Yii::$app->response->redirect(array('yourController/yourAction',
          'yourParam'=>$yourDataProvider));
    

    确保yourParam 名称与外部操作中的参数名称匹配

    在视图中你可以简单地使用一个 url。

    如果需要,添加正确的use

    use yii\helpers\Url;
    

    此示例适用于&lt;a&gt; 标签

    <a  href="<?= Url::to(['yourController/yourAction', 
                'yourParam' =>  $yourDataProvider ]) ?>"  '>your anchor text</a>
    

    在您的情况下,您通过视图链接调用控制器/操作,试试这个

       <?= Html::a('Test', ['calendar', 'dataProvider' => $dataProvider], 
            [ 
                'class' => 'btn btn-primary', 
                'method' => 'post',
            ],
      ]) ?> 
    

    【讨论】:

    • 显示控制器/动作接收器的代码..请
    • 我实际上也尝试过 post 方法,它给了我同样的错误。实际上,我通过简单地使用 SearchModel 的 GET 参数创建一个链接来解决我的最终要求。虽然,我仍然对我们可以将复杂变量从视图传递给控制器​​的解决方案感兴趣。也许,它违背了 MVC 的目的(不知道)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多