This is the part of application, I am working on. Hope this will help you, too.
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'country-states-grid',
'dataProvider'=>$states,
'enablePagination'=>false,
'columns'=>array(
array(
'name'=>'name',
'type'=>'raw',
'value'=>'Chtml::link($data->name,array("viewstate","id"=>$data->id))'
),
array(
'name'=>'status',
'type'=>'raw',
'value'=>'Country::getstates($data->status)'
),
array
(
'class'=>'CButtonColumn',
'template'=>'{update}{delete}',
'buttons'=>array
(
'update' => array
(
'label'=>'Edit',
'url'=>'Yii::app()->createUrl("/admin/country/updatestate",array("id"=>$data->id,"country_id"=>$data->country_id))',
'click'=>"function(){
UIDialog._update_url= $(this).attr('href');
UIDialog();
$('#uidialog').dialog('open'); return false;}"
),
'delete' => array
(
'label'=>'Delete',
'url'=>'Yii::app()->createUrl("/admin/country/deletestate",array("id"=>$data->id,"country_id"=>$data->country_id))',
),
),
)
),
));
?>
<?php
$this->beginWidget('zii.widgets.jui.CJuiDialog', array( // the dialog
'id'=>'uidialog',
'options'=>array(
'title'=>$model->name.' - States/Provinces',
'autoOpen'=>false,
'modal'=>true,
'width'=>550,
'height'=>470,
),
));?>
<div class="divdialog"></div>
<?php $this->endWidget();?>
<script type="text/javascript">
function UIDialog()
{
// public property
var _update_url;
<?php echo CHtml::ajax(array(
'url'=>'js:UIDialog._update_url',
'data'=> "js:$(this).serialize()",
'type'=>'post',
'dataType'=>'json',
'success'=>"function(data)
{
if (data.status == 'failure')
{
$('#uidialog div.dialog').html(data.div);
// Here is the trick: on submit-> once again this function!
$('#uidialog div.dialog form').submit(UIDialog);
}
else
{
$('#uidialog div.dialog').html(data.div);
$.fn.yiiGridView.update('country-states-grid');
$('#uidialog').dialog('close');
}
} ",
))?>;
return false;
}
</script>
In Controller
public function actionUpdatestate($id)
{
$model=$this->loadState($id);
// Uncomment the following line if AJAX validation is needed
$this->performAjaxValidation($model);
if(isset($_POST['CountryStates']))
{
$model->attributes=$_POST['CountryStates'];
if($model->save()){
if (Yii::app()->request->isAjaxRequest)
{
echo CJSON::encode(array(
'status'=>'success',
'div'=>"Updated"
));
exit;
}
else{
$this->redirect(array('/admin/country/view','id'=>$model->country_id));
}
}
}
if (Yii::app()->request->isAjaxRequest)
{
Yii::app()->clientscript->scriptMap['jquery.js'] = false;
echo CJSON::encode(array(
'status'=>'failure',
'div'=>$this->renderPartial('_form', array('model'=>$model), true)));
exit;
}
else{
$this->render('update',array(
'model'=>$model,
));
}
}