Как разделить форму на подразделы в yii, чтобы добиться частичной отправки одной формы

у меня есть модель со всеми полями информации о пользователе. и с генератором 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(); ?>

person Bipin Chandra Tripathi    schedule 05.06.2012    source источник
comment
Вы должны сделать это с помощью javascript/AJAX IMO.   -  person adamors    schedule 05.06.2012
comment
Если я правильно понял, вы хотите, чтобы действие отправки отправляло только те входные данные, которые содержат данные, а для пустых ничего не отправляло, не так ли?   -  person sucotronic    schedule 05.06.2012
comment
@sucotronic да, а также разделил мою единую форму на несколько   -  person Bipin Chandra Tripathi    schedule 05.06.2012


Ответы (1)


Вы пытаетесь получить две разные вещи:

  1. Разделить форму
  2. Избегайте отправки пустых входных данных на сервер

В первую очередь вы можете попробовать один из следующих двух вариантов:

  1. Создавайте различные формы, каждая из которых будет иметь свою собственную кнопку ajaxSubmitButton для отправки данных на сервер.
  2. Оставьте свою форму нетронутой, но вместо использования ajaxSubmitButon используйте другой обычный «CHtml::htmlButton» и укажите в его массиве $htmlOptions пользовательскую функцию js, которая будет вызываться в событии onclick. Эти js-функции (по одной на каждую кнопку, например) будут собирать данные с одних входных данных, а не с других, и будут отвечать за отправку данных через ajax в контроллер.

Во-вторых, вы можете использовать функции js в обработчиках «onclick», как я уже говорил, или вы можете немного изменить свой код, чтобы сделать следующее: Используйте обработчики «beforeSend» и «complete» jQuery ajax. вызовите ($ajaxOptions в CHtml::ajaxSubmitButton), чтобы создать атрибут «отключен» в тех полях, которые пусты перед отправкой, и удалить их после завершения. Вызов сериализации jquery, который использует кнопка отправки ajax, не будет кодировать те атрибуты, которые «отключены».

person sucotronic    schedule 05.06.2012