1

yii で動的ドロップダウンを作成する際に wiki の指示に従いましたが、それでも 2 番目のドロップダウンは生成されません。これが私のビュー ファイルです。

echo CHtml::dropDownList('AccountTypeID','', array(1=>'Admin',2=>'Manager',3=>'Business',4=>'Finance',5=>'Customer Support'),array('ajax' => array('type'=>'POST',
'url'=>CController::createUrl('currentController/dynamiccities'), //url to call.
'update'=>'#city_id', //selector to update
))); 


echo CHtml::dropDownList('city_id','', array());

ここに私のコントローラーがあります:

public function actionDynamiccities(){
$data= RefAccountgroup::model()->findAll('parent_id=:parent_id', 
              array(':parent_id'=>(int) $_POST['AccountTypeID']));

$data=CHtml::listData($data,'AccountGroupID','AccountGroupName');
foreach($data as $value=>$name)
{
    echo CHtml::tag('option',
               array('value'=>$value),CHtml::encode($name),true);
}}
4

4 に答える 4

2

「ajax」宣言に注意してください

'ajax' => array(
 'type'=>'POST',
 'url'=>CController::createUrl('currentController/dynamiccities'), //url to call.
 'update'=>'#city_id', //remember to change it according to this rules #modelname_columnname
 'data'=>array('AccountTypeID'=>'js:this.value'),   //I think you missed this line
 )));

Firefox ブラウザーに firebug がインストールされている場合は、コンソール タブを調べて、ドロップダウン リストの変更がパラメーターAccountTypeIDを正常に送信したかどうかを確認してください。応答も確認できます。

于 2013-02-27T11:16:10.850 に答える
0

まず最初に、従おうとしたチュートリアルへのリンクを実際に含めていれば、質問は改善されたでしょう。

第二に、コメントの質問に答えるとき、「データを送信しませんでした」は実際には何も明確にしません。この時点で、何が投稿され、何が受信されているかを調べるために、Firebug やその他の Web 開発者ツールを調べたのかさえわかりません。私の推測では、POST 要求が行われ、データが送信されず、データが返されていないことがわかります。

AJAX 呼び出しにはデータ パラメーター$_POST['AccountTypeID']がないため、定義されません。つまり$data、コントローラーも空になります。

AccountTypeID を POST するように AJAX を更新します。

echo CHtml::dropDownList('AccountTypeID',
                         '', 
                         array(1=>'Admin',2=>'Manager',3=>'Business',4=>'Finance',5=>'Customer Support'),
                         array('ajax' => array('type'=>'POST',
                                               'url'=>CController::createUrl('currentController/dynamiccities'), //url to call.
                                               'update'=>'#city_id', //selector to update
                                               'data'=> '$("#AccountTypeID").serialize()',
))); 


echo CHtml::dropDownList('city_id','', array());

正しい入力を適切に解析して AccountTypeID を取得するには、データ パラメータを調整する必要がある場合があります。上記のサンプル コードで推測しているだけです。

次に、テスト中に Firebug などを使用して POST されているものを検査し、AccountTypeID が渡されていることを確認してください。

于 2013-02-05T17:40:15.960 に答える
-1

これが役立つかどうかはわかりませんが...

echo CHtml::dropDownList('city_id','', array( 'id' => 'city_id' ));

于 2013-02-06T06:27:42.710 に答える