Come eseguire il rendering della vista solo dopo la selezione in yii2
Sto visualizzando due viste nella mia vista singola.
<?= $form->field($model, 't_type')->dropDownList([
'' => 'Please Select', 'Slab Based' => 'Slab Based',
'TOU Based' => 'TOU Based']) ?>
<div class="showSlab" id="slab" style="display: none">
<?php echo $this->render('_slabBased', [
'modelsTariffSlabs' => $modelsTariffSlabs,
]); ?>
</div>
<div class="showTou" id="tou" style="display: none">
<?php echo $this->render('_touBased', [
'modelsTouSlabs' => $modelsTouSlabs,
]); ?>
</div>
Per impostazione predefinita, entrambi i div sono nascosti ma entrambi vengono visualizzati. Ma voglio eseguire il rendering del modulo solo quando seleziono l'opzione "Basato su lastra" oTOU Based
JS
$('#mdctariff-t_type').on('change', function () {
if (this.value === 'Slab Based') {
$("#slab").show();
$("#tou").hide();
} else if (this.value === 'TOU Based') {
$("#tou").show();
$("#slab").hide();
} else {
$("#slab").hide();
$("#tou").hide();
}
});
Nota: dopo aver reso il modulo lo sto anche salvando
Aggiorna 1
Ho provato a renderlo tramite ajax
$url = Url::toRoute(['/mdctariff/_slabBased','modelsTariffSlabs'=>$modelsTariffSlabs]);
doGet('$url')
function doGet(url, params) {
params = params || {};
$.get(url, params, function(response) { // requesting url which in form
$('#slab').html(response); // getting response and pushing to element with id #response
});
}
Riferimento: https://stackoverflow.com/a/37647328/6854117
Quando seleziono un'opzione non riesco a visualizzare il modulo. Nella mia Network
scheda ricevo un errore Not Found (#404): Page not found.
. Il URL
generato èhttp://localhost/mdc/backend/web/mdctariff/_slabBased
Mentre incollo questo URL nel mio browser ricevo lo stesso errore. Devo essermi perso qualcosa che non so
Come posso eseguire il rendering della mia vista solo quando seleziono un'opzione?
Qualsiasi aiuto sarebbe molto apprezzato.
Risposte
Nel tuo URL
$url = Url::toRoute(['/mdctariff/_slabBased','modelsTariffSlabs'=>$modelsTariffSlabs]);
Il primo argomento dovrebbe essere il percorso esistente corretto. Ma l'hai scritto sotto forma di directory, cioè mdctafiff
cartella e poi _slabBased
file.
Quello che devi fare qui è creare un metodo di azione nel controller in modo da potervi accedere tramite route. Mi piace MdctariffController
e partialAction
quindi nel corpo del partialAction
metodo è necessario chiamare il _slabBased
file di visualizzazione. Inoltre puoi anche fare riferimentohttps://www.yiiframework.com/doc/guide/2.0/en/helper-url per Url :: toRoute ().