我有以下小部件:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'feast-days-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'day',
'id',
array(
'class'=>'CButtonColumn',
'template'=>'{delete}',
),
),
));
过滤器:
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
'postOnly + delete', // we only allow deletion via POST request
);
}
规则:
public function accessRules()
{
return array(
array('allow',
'actions' => array('index','view','create', 'admin', 'delete', 'update'),
'roles' => array('master'),
),
array('deny', // deny all users
'users' => array('*'),
),
);
}
删除操作:
public function actionDelete($id)
{
FeastDays::model()->deleteAllByAttributes(array('id'=>$id));
// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
我正在使用的actionDelete是第一个,看起来它从未实际到达它。首先我没有唯一的ID-s,只有几天,我给了模型ID-s,因为我认为它可能会导致我在函数中使用日期作为属性的问题,但结果相同。
我正在搜索这个问题,大多数人都遇到了jQuery之前加载了一些.js文件的问题,但在我的webapp中,jQuery首先加载。 其他人的问题是ajax使用GET而不是POST,但我已经在Firebug中检查过我的请求使用POST。我甚至禁用了ajax但是如果没有它我仍会得到错误400。
请帮助我,我迷路了。
答案 0 :(得分:0)
我终于自己解决了这个问题。看起来它需要一个只包含整数值的ID(我尝试使用 uniqid()为每个日期生成ID-s,但它仍然会引发错误400),如果它只获得整数ID-给予 actionDelete()的s,它可以正常工作。如果有人知道为什么会这样,我会很感激他们的答案,因为我觉得这个案子很奇怪。