2

ユーザー情報に関するすべてのフィールドを含むモデルがあります。そして、crudジェネレーターを使用して、以下のようにビューを作成し、ビュー、フォームビューを変更しました

ここでは、編集プロファイル部分を非表示にしています。ユーザーが編集をクリックすると、ポップアップと編集フィールドのオプションが表示されます。問題は、送信するときにフォーム全体を送信することですが、編集した部分だけを送信する必要があります。もう1つの問題は、何かを編集してからフォームをキャンセルすると、値が編集されたままになり、いずれかを送信するときに保存されることです。フォームの他の部分。フォームの部分的な送信をどのように達成できるかを提案してください

<?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(); ?>
4

1 に答える 1

1

あなたは2つの異なるものを取得しようとしています:

  1. フォームを分割する
  2. 空の入力をサーバーに送信しないようにする

まず、次の 2 つのオプションのいずれかを試すことができます。

  1. さまざまなフォームを作成します。それぞれに独自の ajaxSubmitButton があり、データをサーバーに送信します
  2. フォームはそのままにしておきますが、ajaxSubmitButton を使用する代わりに、さまざまな通常の 'CHtml::htmlButton' を使用し、onclick イベントで呼び出されるカスタム js 関数を $htmlOptions 配列で指定します。これらの js 関数 (たとえば、ボタンごとに 1 つ) は、ある入力からデータを収集し、他の入力からデータを収集し、ajax を介してコントローラーにデータを送信します。

2 つ目は、前に述べたように、'onclick' ハンドラーで js 関数を使用するか、コードを少し変更して次のことを行うことができます: jQuery ajax の 'beforeSend' および 'complete' ハンドラーを使用する(CHtml::ajaxSubmitButton の $ajaxOptions) を呼び出して、送信前に空のフィールドに「無効」属性を作成し、完了後にそれらを削除します。ajax送信ボタンが使用する「シリアル化」jquery呼び出しは、「無効」な属性をエンコードしません。

于 2012-06-05T08:19:08.503 に答える