Yii CGridView Pager 生成链接错误?
Posted
技术标签:
【中文标题】Yii CGridView Pager 生成链接错误?【英文标题】:Yii CGridView Pager generate link wrong? 【发布时间】:2012-06-04 08:52:40 【问题描述】:我有一个简单的搜索表单 (site/search.php) 可以将搜索字符串发送到控制器并在可用时显示搜索结果。我正在使用 CGridView 来显示数据。 更新这是我的视图(site/search.php)文件:
<form name="quickSearchForm" action="<?php echo Yii::app()->createUrl("site/search"); ?>" method="POST">
<div data-role="fieldcontain">
<input type="search" name="searchText" id="searchText" value="<?php echo $searchText; ?>"/>
<input type="submit" name="submitBtn" id="submitBtn" value="search"/>
<a href="#">Advanced</a>
</div>
</form>
<?php
if (!empty(itemList))
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'task-grid',
'dataProvider'=>$itemList,
'pager'=>array(
'header' => '',
'firstPageLabel' => '<<',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
'lastPageLabel' => '>>',
),
'template'=>'pageritemspager',
'columns'=>array(
array(
'name' => 'name',
'value' => '$data->name',
),
array(
'name' => 'date',
'value' => 'date("d/m/Y",strtotime($data->date) )',
),
),
),);
//end if
?>
在控制器中,我使用 $searchText 通过 CActiveDataProvider 获取数据,然后返回到 search.php。
<?php
$this->render($view = "search", array(
'searchText' => $searchText,
'itemList' => $itemListBySearch,
'taskResult' => $tasks,
));
结束更新
我的问题是 $itemList 有很多项目,GridView 会分页。但是,我点击按钮页面[2],浏览器直接指向r=site/search&page=2
,并且itemList 丢失了!
我可以使用 ajax 而不是直接发送到r=site/search&page=2
???
【问题讨论】:
您的搜索操作是什么样的?不需要整个代码,只需要渲染代码 是的,我已经更新了问题。感谢您的帮助! 好的,还有一件事,你的文件看起来怎么样?搜索表单在哪个文件(视图)中?网格在哪个视图(文件)中? 哦,gridView 和搜索表单在一个文件中site/search.php
(上面更新)
使用@MadAnd 建议的<?php echo Chtml::beginForm(array('site/search'), 'get'); ?>
,gridView 运行非常好。单击分页按钮时,它不会直接指向site/index
。
【参考方案1】:
Yii 分页器的默认实现会保留请求中的所有 GET 值,但您的搜索表单使用的是 POST,因此分页链接中不包含搜索词。尝试将表单方法更改为 GET,您将获得所需的行为:
<?php echo CHtml::beginForm(array('site/search'), 'get'); ?>
PS:恕我直言,搜索表单应始终使用 GET 方法来发送搜索选项,因为它提供了复制包含所有搜索词的 URL 的能力,然后将其发送到其他人(例如给开发人员)或保存它以进一步复制相同的请求。
【讨论】:
是的,我知道一个流行的搜索页面应该使用 GET 方法,但是当使用 GET 方法时,点击提交按钮后,我的页面直接到r=site/index&searchText=string_to_searching
,而我的搜索操作是r=site/search
。如何使它不指向site/index
?
非常感谢!当我使用<?php echo CHtml::beginForm(array('site/search'), 'get'); ?>
时,效果非常好!以上是关于Yii CGridView Pager 生成链接错误?的主要内容,如果未能解决你的问题,请参考以下文章
Yii: 如何在CGridView通过Ajax方式刷新数据后执行JS脚本