更新时从属下拉列表不显示选定值

Dependent dropdown is not showing selected value when update

我是 yii 的新手。我有一个依赖下拉列表,我的问题是当有人编辑时依赖下拉列表,而编辑下拉列表不会自动选择。 这是我的表单代码:

  <div class="row">

  <?php 
Yii::app()->clientScript->registerScript('courseDropdown','jQuery(function($) {
            $("#Subject_Subjectid").trigger("change"); 
            $("#Subjectcourse_CourseId").val(\''.$model->CourseId.'\');
    });
');//write this code on _form.php file
?>

            <?php echo $form->labelEx($model,'Subjectid'); ?>       
            <?php 

             $sub = CHtml::listData(Subject::model()->findAll(array("condition"=>"School_Id='$School' and Status=1")),'Subjectid','SubjectName');

             echo CHtml::activeDropDownList($model,'Subjectid',CHtml::listData(Subject::model()->findAll(array("condition"=>"School_Id='$School' and Status=1")),'Subjectid','SubjectName'),
             array(
             'empty'=>'--Select a Subject--',
             'ajax' => array(
             'type'=>'POST', //request type
             'url'=>CController::createUrl('Timetable/subjectid'), //url to call.
             'data'=>array('Subjectid'=>'js: $(this).val()'),         
             'update'=>'#CourseId', //selector to update       
             )));
            echo $form->error($model,'Subjectid');

             echo $form->labelEx($model,'CourseId');
             echo CHtml::dropDownList('CourseId','', array(), array('empty' => '-- Select a Course --'));
             echo $form->error($model,'CourseId');

     ?>
    </div> 

这是我的控制器操作

public function actionSubjectid()
    {               
        $SchoolId=Yii::app()->session['Schoolid'];
        $subjectid=$_POST['Subjectid'];
        $subject = Subject::model()->findByPk($subjectid);      
        $data = Subjectcourse::model()->findAll(array("order"=>"CourseName ASC", "select"=>"CourseId,CourseName","condition" => "SubjectId='$subjectid' AND Status=1 AND School_Id='$SchoolId'"));
        $data=array('empty'=>'-- Select a Course --') +CHtml::listData($data,'CourseId','CourseName');      
        foreach($data as $value=>$name)
        {
            echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true);
        }
    }

这是我的行动更新

public function actionUpdate($id)
    {
        $model=$this->loadModel($id);

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['Timetable']))
        {
            $model->attributes=$_POST['Timetable'];
            $model->School_Id=Yii::app()->session['Schoolid'];
            $CourseId=$_POST['CourseId'];
            if($CourseId=="empty")
                   $model->CourseId='';
            else
                $model->CourseId=$_POST['CourseId'];           


            $model->Status=1;
            if($model->save())
                $this->redirect(array('view','id'=>$model->Id));
        }

        $this->render('update',array(
            'model'=>$model,
        ));
    }

由于您的第二个下拉菜单仅在第一个下拉菜单中发生 change 事件时才会起作用,因此您可以在页面加载时触发此事件,如下所示:

<?php 
Yii::app()->clientScript->registerScript('courseDropdown','jQuery(function($) {
            $("#Subject_Subjectid").trigger("change"); 
            $("#Subjectcourse_CourseId").val(\''.$model->CourseId.'\');
    });
');//write this code on _form.php file
?>

编辑: 或者,您可以通过从第一个下拉列表的值中查询数据来填充第二个下拉列表:

if(!$model->isNewRecord) {
    $courseArr = Chtml::listData(Subjectcourse::model()->findAllByAttributes(array('SubjectId'=>$model->Subjectid)), 'CourseId','CourseName'); //your query, modify according to need
} else {
    $courseArr = array();
}

echo $form->labelEx($model,'CourseId');
echo CHtml::dropDownList('CourseId','', $courseArr, array('empty' => '-- Select a Course --'));
echo $form->error($model,'CourseId');