Php 更改下拉列表后更新yii列表视图

Php 更改下拉列表后更新yii列表视图,php,yii,Php,Yii,我想使用下拉菜单更改listview的页面大小。请帮我找到解决办法。 我读过很多文章,但不能做到这一点。你能找到我犯的错误吗 我正在使用以下代码 index.php视图的代码 下拉列表代码 <?php echo CHtml::beginForm(); ?> <?php echo CHtml::dropDownList('CategoryMst_pagesize','20', array('10'=>'10

我想使用下拉菜单更改listview的页面大小。请帮我找到解决办法。 我读过很多文章,但不能做到这一点。你能找到我犯的错误吗

我正在使用以下代码

index.php视图的代码

下拉列表代码

  <?php echo CHtml::beginForm(); ?>
            <?php echo CHtml::dropDownList('CategoryMst_pagesize','20',
                    array('10'=>'10','20'=>'20','50'=>'50','100'=>'100'
                    ),
                    array('class'=>'form-control',
                    /*'ajax'=>array(
                        'type'=>'GET',
                        'data'=>array('pagesize'=>'js:this.value'), 
                        'ajaxUpdate':()
                    ),*/
                ));
            ?>
            <?php echo CHtml::endForm(); ?> 

您确实不应该使用$'CategoryMst\u pagesize'。请改为使用

然后从我所看到的,你不记得任何地方的页面大小,在你改变它一次后,一旦你转到另一个页面,它将恢复到你以前的页面大小。我就是这样做的: 首先要记住页面的大小,因为现在你没有。我个人推荐这个,因为它真的,真的,真的很好。它还记得你的过滤器无价。 2为控制器创建一个只保存页面大小的函数

/**
 * Saves the new page size for this particular model
 */
public function actionPageSize($pagesize)
{
    \Yii::app()->user->setState($this->modelName() . '_pagesize', $pagesize);
}
3为页面大小创建下拉列表,我使用Select 2,但您可以使用普通下拉列表。同样的想法

    <?php $this->widget('MySelect2', array(
        'name' => 'pageSize',
        'data'=>array('10' => '10', '25' => '25', '50' => '50', '100' => '100'),
        'options'=>array('allowClear' => false, 'minimumResultsForSearch' => 30),
        'htmlOptions' => array(
            'data-ajax-dropdown' => $this->createUrl('pageSize'),
            'style' => 'width: 80px',
            'options'=>array(
                (Yii::app()->user->getState($this->modelName() . '_pagesize', Yii::app()->params['defaultPageSize']))=>array('selected'=>'selected')
    ))));?>
附言:我知道我不应该使用。活着

5.在寻找模型的过程中就像你一样我有

return new \CActiveDataProvider($this, array(
    'criteria'=>$criteria,
    'sort'=>array(
        'defaultOrder'=>$this->getTableAlias(false,false) . '.name asc',
    ),
    'pagination'=>array(
        'pageSize'=> \Yii::app()->user->getState(get_class($this) . '_pagesize', \Yii::app()->params['defaultPageSize']),
    ),                  
));

嘿,谢谢你的回复。。。。但事实上,我很高兴我的代码是有效的。。。。包含jquery.min文件时出现问题。。。它被收录了两次。。。因此,我无法使用javascript调用操作。再次感谢您确保使用registercorescript包含jquery,这将防止它被包含2次。是的,我已经在布局中使用标记直接包含了文件。。。。也许这就是问题所在。。。。好的,我将使用registerscript。。。非常感谢。
    <?php $this->widget('MySelect2', array(
        'name' => 'pageSize',
        'data'=>array('10' => '10', '25' => '25', '50' => '50', '100' => '100'),
        'options'=>array('allowClear' => false, 'minimumResultsForSearch' => 30),
        'htmlOptions' => array(
            'data-ajax-dropdown' => $this->createUrl('pageSize'),
            'style' => 'width: 80px',
            'options'=>array(
                (Yii::app()->user->getState($this->modelName() . '_pagesize', Yii::app()->params['defaultPageSize']))=>array('selected'=>'selected')
    ))));?>
/*==========================
AUTOSUBMIT DROPDOWNS FOR THE PAGE SIZE
==========================*/
$('#pageSize').live('change',function(e){
    var element = $(this);
    jQuery.ajax({
        "type": "GET",
        "url": $(this).attr("data-ajax-dropdown"),
        "cache": false,
        "data":{pagesize: $(this).val()}
    })
    .success(function ( response ) {
        $.fn.yiiGridView.update(element.closest('.widget.table').find('div.grid-view').attr('id'));
        $.jGrowl("Pagination changed", { life: 2000 });
    });    
});
return new \CActiveDataProvider($this, array(
    'criteria'=>$criteria,
    'sort'=>array(
        'defaultOrder'=>$this->getTableAlias(false,false) . '.name asc',
    ),
    'pagination'=>array(
        'pageSize'=> \Yii::app()->user->getState(get_class($this) . '_pagesize', \Yii::app()->params['defaultPageSize']),
    ),                  
));