我通过ajax和renderPartial呈现表单。 我注意到表单不再有效。有些搜索让我将processOutput设置为true,但验证仍然没有执行。这似乎是大多数人的答案。
我的行动:
public function actionView($id){
$model=$this->loadModel($id);
$this->performAjaxValidation($model);
if(isset($_POST[$this->searchModel]))
{
$model->attributes=$_POST[$this->searchModel];
if($model->save())
$this->redirect(array('/company/'.$model->company->company_id));
}
$this->renderPartial('view',array('model'=>$model), false, true);
}
并形成:
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'person-form',
'enableAjaxValidation'=>true,
'clientOptions' => array('validateOnSubmit'=>true),
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<?php echo $form->labelEx($model,'firstname'); ?>
<?php echo $form->textField($model,'firstname',array('size'=>30,'maxlength'=>255)); ?>
<?php echo $form->error($model,'firstname'); ?>
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
<?php $this->endWidget(); ?>
最后加载表单的代码:
<div class="form ajax-load hidden overlay"></div>
<script>
$(document).ready(function(){
$('.view').click(function(e){
e.preventDefault();
$('.ajax-load').html('<img src="/images/spinner/search.gif"/>').show();
$('.ajax-load').load($(this).attr('href'));
});
});
</script>
知道我可能做错了吗?
答案 0 :(得分:1)
据我所知, processOutput 在 renderPartial 加载javascript,如果你用js加载这个渲染的块,这个ofc对你没有帮助 via ajax
我觉得这就是发生的事情:
所以你有两个选择:
答案 1 :(得分:0)
这实际上是因为我在通过ajax加载新表单之前已经在页面上有一个重复的表单。一个用于新记录,一个用于通过ajax更新记录。
删除重复的表单后,验证工作正常。
希望如果他们遇到同样的问题,这可能有所帮助。