如何在yii中将表单拆分为多个子部分以实现单个表单的部分提交

如何在yii中将表单拆分为多个子部分以实现单个表单的部分提交,yii,form-submit,yii-components,yii-events,Yii,Form Submit,Yii Components,Yii Events,我有一个关于用户信息的所有字段的模型。使用crud生成器,我创建了视图并修改了视图,表单视图,如下所示 在这里,我隐藏了编辑配置文件部分,当用户单击编辑时,它会显示弹出窗口和编辑字段选项。现在的问题是,当我提交时,它会提交整个表单,但我只需要提交编辑的部分,还有一个问题是,当我编辑某些内容,然后取消表单时,它仍然保持编辑的值,然后在表单的任何其他部分提交时保存。请建议我如何实现表格的部分提交 <?php $form=$this->beginWidget('CActiveForm',

我有一个关于用户信息的所有字段的模型。使用crud生成器,我创建了视图并修改了视图,表单视图,如下所示

在这里,我隐藏了编辑配置文件部分,当用户单击编辑时,它会显示弹出窗口和编辑字段选项。现在的问题是,当我提交时,它会提交整个表单,但我只需要提交编辑的部分,还有一个问题是,当我编辑某些内容,然后取消表单时,它仍然保持编辑的值,然后在表单的任何其他部分提交时保存。请建议我如何实现表格的部分提交

<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'my-form',
'enableAjaxValidation'=>true,
'htmlOptions'=>array('enctype'=>'multipart/form-data'),
'action' => Yii::app()->createUrl('/userprofile/editprofile&id='.$model->id),
)); 
?>
<h4>Edit Profile Pic</h4>
<div>
<?php echo CHtml::fileField('profilePic'); ?>
<div id="editpic"></div>
<div class="btns" id="uploadbutton">            
<?php echo CHtml::ajaxSubmitButton('Update', $this->createUrl('/rageprofile/editprofile&id='.$model->id), array('update'=>'#targetdiv'));?>
</div>
</div>
<div class="editbutton">&#9998; Edit</div>
<div class="eitit edly einfo" style="z-index:9001;" >
<span class="close">&#10006;</span>
<h4>Basic Info</h4>
<?php echo $form->labelEx($model,'firstName'); ?>
<?php echo $form->textField($model,'firstName',array('size'=>30,'maxlength'=>30)); ?>
<?php echo $form->error($model,'firstName'); ?>
<?php echo $form->labelEx($model,'middleName'); ?>
<?php echo $form->textField($model,'middleName',array('size'=>30,'maxlength'=>30)); ?>
<?php echo $form->error($model,'middleName'); ?>
<?php echo $form->labelEx($model,'lastName'); ?>
<?php echo $form->textField($model,'lastName',array('size'=>30,'maxlength'=>30)); ?>
<?php echo $form->error($model,'lastName'); ?><br>
<?php echo $form->labelEx($model,'DOB'); ?>
<?php echo $form->textField($model,'d_o_b',array('size'=>30,'maxlength'=>30)); ?>
<?php echo $form->error($model,'d_o_b'); ?><br>
<?php echo $form->textField($model,'m_o_b',array('size'=>30,'maxlength'=>30)); ?>
<?php echo $form->error($model,'m_o_b'); ?><br>
<?php echo $form->textField($model,'y_o_b',array('size'=>30,'maxlength'=>30)); ?>
<?php echo $form->error($model,'y_o_b'); ?><br>
<?php echo $form->labelEx($model,'City'); ?>
<?php echo $form->textField($model,'city',array('size'=>30,'maxlength'=>30)); ?>
<?php echo $form->error($model,'city'); ?><br>
<?php echo $form->labelEx($model,'State'); ?>
<?php echo $form->textField($model,'state',array('size'=>30,'maxlength'=>30)); ?>
<?php echo $form->error($model,'state'); ?><br>
<?php echo $form->labelEx($model,'Country'); ?>
<?php echo $form->textField($model,'country',array('size'=>30,'maxlength'=>30)); ?>
<?php echo $form->error($model,'country'); ?><br>
<?php echo CHtml::ajaxSubmitButton('Update', $this->createUrl('/rageprofile/editprofile&id='.$model->id), array('update'=>'#targetdiv'));?>
</div>
</div>
</div>
<?php $this->endWidget(); ?>

编辑个人资料图片
✎ 编辑
✖
基本信息








您试图获得两种不同的东西:

  • 拆开表格
  • 避免向服务器发送空输入
  • 首先,您可以尝试以下两个选项之一:

  • 创建各种表单,每个表单都有自己的ajaxSubmitButton,用于向服务器发送数据
  • 保持表单不变,但不要使用ajaxSubmitButon,而是使用各种普通的“CHtml::htmlButton”,并在其$htmlOptions数组中指定要在onclick事件中调用的自定义js函数。这些js函数(例如,每个按钮一个)将从一些输入而不是其他输入中收集数据,并负责通过ajax向控制器发送数据

  • 对于第二件事,您可以使用“onclick”处理程序中的js函数,正如我前面所说的,或者您可以稍微修改代码来执行以下操作:使用jQuery ajax调用的“beforeSend”和“complete”处理程序($CHtml::ajaxSubmitButton中的ajaxOptions)在发送前为空的字段中创建属性“disabled”,并在完成后删除它们。ajax submit按钮使用的“serialize”jquery调用不会对“禁用”的属性进行编码。

    您必须使用javascript/ajax IMO进行编码。如果我理解得很好,您希望submit操作只发送包含数据的输入,而对于空的输入,不发送任何内容,“不是吗?”苏科龙说,“是的,而且还把我的一个形体分成了多个。”