【问题标题】:How to Split a form in subsections in yii to achieve partial submit of a single form如何在yii中拆分表单以实现单个表单的部分提交
【发布时间】:2012-06-05 04:15:54
【问题描述】:

我有一个模型,其中包含有关用户信息的所有字段。并使用 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(); ?>

【问题讨论】:

  • 您必须使用 javascript/AJAX IMO 执行此操作。
  • 如果我理解得很好,您希望提交操作只发送包含数据的输入,而对于那些为空的,不要发送任何内容,不是吗?
  • @sucotronic 是的,并且还将我的单个表单拆分为多个

标签: yii form-submit yii-components yii-events


【解决方案1】:

你试图得到两个不同的东西:

  1. 拆分表单
  2. 避免向服务器发送空输入

首先,您可以尝试以下两个选项之一:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多