私はここのウィキに投稿されたのと同様の解決策を持ってい ます
しかし、検証ルールを期待どおりに機能させることができません。送信ボタンをクリックすると、モーダルウィンドウが閉じ、すべての必須フィールドに入力しないと何も保存されません。
私がここで欠けているものについて何か考えはありますか?アクションとビューでajax検証を「オン」にしています。
これが私のコードの一部です:
モデルInstitution.php
public function actionAddnew() {
$model=new Institution;
// Ajax Validation enabled
$this->performAjaxValidation($model);
$flag=true;
if(isset($_POST['Institution']))
{ $flag=false;
$model->attributes=$_POST['Institution'];
if($model->save()) {
//Return an <option> and select it
echo CHtml::tag('option',array (
'value'=>$model->id,
'selected'=>true
),CHtml::encode($model->name),true);
}
}
if($flag) {
Yii::app()->clientScript->scriptMap['jquery.js'] = false;
$this->renderPartial('createDialog',array('model'=>$model,),false,true);
}
}
ファイルcreateDialog.php
<?php
$this->beginWidget('zii.widgets.jui.CJuiDialog',array(
'id'=>'institutionDialog',
'options'=>array(
'title'=>Yii::t('institution','Institution'),
'autoOpen'=>true,
'modal'=>'true',
'width'=>'auto',
'height'=>'auto',
),
));
echo $this->renderPartial('_formDialog', array('model'=>$model)); ?>
<?php $this->endWidget('zii.widgets.jui.CJuiDialog');?>
そして最後に_formDialog.phpからの作品
<div class="form" id="institutionDialogForm">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'institution-form',
'enableAjaxValidation'=>true,
));
?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'name'); ?>
<?php echo $form->textField($model,'name',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'name'); ?>
</div>
....
<div class="row buttons">
<?php echo CHtml::ajaxSubmitButton(Yii::t('institution','Create'),CHtml::normalizeUrl(array('institution/addnew','render'=>false)),array('success'=>'js: function(data) {
$("#User_institutionid").append(data);
$("#institutionDialog").dialog("close");
}'),array('id'=>'closeInstitutionDialog')); ?>
</div>
<?php $this->endWidget(); ?>
</div>
何か案が?この例では、ここでも必要とされるルールで必要に応じてすでに設定されている「名前」が必要です。giiが生成するデフォルトのcrudファイルでは、これは正常に機能していることに注意してください。そして、私はモーダルウィンドウを備えたウィザードを実装して、ウィザードの入力中に新しいitenを追加しようとしています。
より明確にするために、モーダルウィンドウの送信ボタンを押す前に必須フィールドに入力するように求められるように、モーダルウィンドウの送信は避けたいと思います。