0

私の2つの依存ドロップダウンexam_typeとstatusは正常に機能しています.値を表示しています..しかし、それらの値はデータベースに設定されていません..plz助けてください...これは私のコードです

フォーム ビュー:


   <tr>
<td><?php echo $form->labelEx($model,'exam type :'); ?></td>

<td> 

   <?php echo   CHtml::dropDownList('exam_type','',CHtml::listData(class1::model()->findAll(),'class','class'),array('empty'=>'Choose one',

'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('dynamicstates'), //url to call.
//Style: CController::createUrl('currentController/methodToCall')
'update'=>'#status', //selector to update


)));

//empty since it will be filled by the other dropdown
?>


</td>

<td>    <?php echo $form->error($model,'exam_type'); ?></td>

</tr>
 <tr>
<td><?php echo $form->labelEx($model,'status :'); ?></td>
<td><?php echo CHtml::dropDownList('status','', array());?></td>
<td>    <?php echo $form->error($model,'status'); ?></td>

</tr>

コントローラー ビュー:

public function actiondynamicstates()
{

echo $aasd=$_POST['exam_type'];
 echo $data=admission::model()->findAll('class=:class',
              array(':class'=>$aasd));


$data=CHtml::listData($data,'studentid','studentfname');

    foreach($data as $value=>$name)
            echo CHtml::tag('option', array('value'=>$value), CHtml::encode($name), true);

}
4

3 に答える 3

1

私もこの問題に行き詰まる数日前に、いくつかのトリックを行いました。

   <tr>
<td><?php echo $form->labelEx($model,'exam type :'); ?></td>

<td> 

<?php echo   CHtml::dropDownList('exam_type','',CHtml::listData(class1::model()->findAll(),'class','class'),array('empty'=>'Choose one',

'ajax' => array(
'type'=>'POST', //request type
 'url'=>CController::createUrl('dynamicstates'), //url to call.
//Style: CController::createUrl('currentController/methodToCall')
// 'update'=>'#status', //selector to update
 'update'=>'#modelname_status', //here is the trick replace modelname to orginal model class name 


  )));

 //empty since it will be filled by the other dropdown
 ?>
 </td>

 <td>    <?php echo $form->error($model,'exam_type'); ?></td>

 </tr>
 <tr>
 <td><?php echo $form->labelEx($model,'status :'); ?></td>
  <?php //echo CHtml::dropDownList('status','', array());?>
 <td><?php echo CHtml::dropDownList('modelname[status]','', array());?></td>//same here
   <td>    <?php echo $form->error($model,'status'); ?></td>

    </tr>

上記のコードで変更しました:

 'update'=>'#modelname_status', //here is the trick replace modelname to orginal model class name 

 <td><?php echo CHtml::dropDownList('modelname[status]','', array());?></td>//same here

動作しない場合でも、コメントしてください。(テストしていません。コントローラーに問題があるようです。)

于 2012-06-17T08:17:26.437 に答える
1

ドロップダウン名の問題である可能性が最も高いです。交換する必要があります

CHtml::dropDownList('exam_type'

CHtml::dropDownList(CHtml::activeName($model, 'exam_type'

CHtml::dropDownList('status'

CHtml::dropDownList(CHtml::activeName($model, 'status'
于 2012-06-13T09:36:19.407 に答える
0

あなたの問題がすでに解決されていることを願っています。これらのドロップダウンがデータベースを更新しない理由をまだ疑問に思っている人がいれば、それらは安全な属性としてリストされていないため更新されません。ドロップダウン リストを機能させる例を次に示します (重要な部分のみを示します)。

「showOnHome」というフィールドを追加するとします。まず、データベース テーブルに「showOnHome」というフィールドを作成します (フィールド タイプとしては int(1) を好みます)。

次に、モデル Model で:

 public function rules() {
....
....
array('showOnHome','safe'),
}

....
....
 public function attributeLabels() {
    return array(
    .....
    .....
    .....
   'showOnHome' => 'Show On Homepage' ,

   )
}

あなたのビューで:

<div class="row">
        <?php echo $form->labelEx($model,'showOnHome'); ?>
        <?php echo $form->dropDownList($model, 'showOnHome', array('0'=>'No','1'=>'Yes') , array('empty'=>'--Select--')); ?>
        <?php echo $form->error($model,'showOnHome'); ?>
</div>

Yii によって生成されたデフォルトのコントローラ コードを変更していない場合、上記のコード スニップセットで問題なく動作するはずです。

/**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
    {
        $model=new Livefuture;

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

        if(isset($_POST['Livefuture']))
        {
            $model->attributes=$_POST['Livefuture'];
            if($model->save())
                $this->redirect(array('view','id'=>$model->id));
        }

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

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id)
    {
        $model=$this->loadModel($id);

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

        if(isset($_POST['Livefuture']))
        {
            $model->attributes=$_POST['Livefuture'];
            if($model->save())
                $this->redirect(array('view','id'=>$model->id));
        }

        $this->render('update',array(
            'model'=>$model,
        ));
    }
于 2013-03-13T07:56:07.013 に答える