【问题标题】:Yii CGridView renders a new page instead of AJAXYii CGridView 渲染一个新页面而不是 AJAX
【发布时间】:2014-07-16 10:03:19
【问题描述】:

在我网站的索引页面中,我有浮动的 div 块,里面有 CGridView。

我需要使用排序、过滤、分页等选项,但只能通过更新这个唯一的 div 而不是刷新整个页面。

按应有的方式呈现数据,我只能更新网格内容 - 所有<a> 都有 href,将用户发送到指定视图。

这是网格的视图:(这是我的 views.users.usersGrid.php 的唯一内容)

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $model->search(),
    'filter' => $model,
    'ajaxUrl' => 'modules/subcntrl/usersGrid',
    'ajaxUpdate' => 'users-grid',
    'columns' => array(
        array(
            'name' => 'name',
            'type' => 'raw',
            'value' => 'CHtml::encode($data->name)'
        ),
        array(
            'class'=>'CButtonColumn',
        ),
    ),
));

从views.users.users.php调用:<?php $this->actionUsersGrid(); ?>

控制器:

public function actionUsers() {
    $this->renderPartial('users');
}

public function actionUsersGrid() {
    if(!Yii::app()->request->isAjaxRequest) die('Url should be requested via ajax only');
    $model = new Users();
    $this->renderPartial('usersGrid',array(
        'model' => $model,
    ));
}

不胜感激

【问题讨论】:

  • “它是从views.users.users.php中调用的:actionUsersGrid(); ?>”是什么意思
  • ...所以不确定我是否可以帮助您处理 Ajax 请求本身,但在我看来,您不必在 users.php 上调用 <?php $this->actionUsersGrid(); ?>,而是必须将 renderPartial('usersGrid'... 放在那里并将您的 ajaxUrl 命名为完全不同的名称,例如。 ajaxCall,然后在控制器中,去掉actionUsersGrid,将其命名为actionAjaxCall(当然,取决于你如何命名ajaxUrl),然后在那里设置你的ajax操作......
  • 这是 users.php 中放置 gridview 的行。像这样:some_text <div id="users-grid"><?php $this->actionUsersGrid(); ?></div>
  • 我刚刚编辑了我的评论......基本上你叫错了......我只将它添加为评论的原因是因为我无法帮助你ajax 调用,但是视图的设置方式肯定不正确...
  • 代码经过一些尝试和我在此发现的 tuts 进行了一些更改以使其工作。我之前在一个文件中拥有 users 和 usersGrid,是通过 renderPratial('usersGrid',array('model'=>$model)) 构建的,所以没有这个调用,但它的工作方式与现在相同。好的,谢谢,我会根据您的评论尝试更改这部分,并让您知道

标签: php ajax yii


【解决方案1】:

请像这样使用renderPartial方法中的第三个和第四个参数,

$this->renderPartial('users',array(),false,true);

它将解决您在第四个参数中的问题(设置 processOutput=true

【讨论】:

  • 我在父视图中使用它,我也在这里尝试过,但没有效果。看看我对这个问题的最后评论:)
【解决方案2】:

请像这样在 renderPartial 方法中使用第三个和第四个参数,

$this->renderPartial('users',array(),false,true);

它将解决您在第四个参数中的问题(设置 processOutput=true

这在我的代码中不起作用。我在 ma 控制器中这样使用

$this->renderPartial('_searchQuote', array('model' => $model, 'month' => $month, 'user' => $user), false, $processOutput=false );      

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多