我遇到了一些问题。所以基本上我尝试在CGridView列中创建下拉列表来管理状态。我想在数据库发生变化时加载。下面是网格列:
array(
'name'=>'status',
'type'=>'raw',
'value'=>'CHtml::dropDownlist(\'status\',\'\',array(\'1\'=>\'Complete\',
\'2\'=>\'Paid\',
\'3\'=>\'Not paid\'),array(
\'class\'=>\'status\',
\'options\'=>array($data->status=>array(\'selected\'=>\'selected\')),
\'ajax\'=>array(
\'type\' => \'POST\',
\'url\'=>Yii::app()->createUrl(\'user/orders/status\'),
\'data\'=>array(\'status\'=>\'js:this.value\',\'order\'=>$data->id),
)
));',
),
下面是控制器动作代码
public function actionStatus()
{
if (isset($_POST['order'])){
$model=$this->loadModel($_POST['order']);
$model->status=$_POST['status'];
$model->save();
}
}
那么问题是什么呢?我得到的是last $data-〉id,而不是下拉列表中被更改的元素的id。其他的都正常。
也许这很容易,但我找不到任何解决办法。
1条答案
按热度按时间zwghvu4y1#
首先:如果在模型类中使用getter,就可以避免所有这些难看的转义代码:
现在添加一个轴网列,如
现在剩下的是添加一些Javascript。如果你注册一个代码片段来控制所有按钮,而不是为每个按钮添加一个脚本,那么效率会高得多。你必须监听所有下拉菜单的
change
事件。所以你可以在页面上注册一个内联代码片段,并使用网格视图,如下所示:我已经添加了一个
body
选择器,以确保如果通过 AJAX 更新GridView,事件仍然会触发。您可能还需要在ajaxPost()
调用中添加一个成功处理程序。请注意,上面的内容可能会有错别字,所以不要只是复制和粘贴,而是要试着理解它是如何工作的。它应该会让你走上正确的轨道。