Come eseguire il rendering della vista solo dopo la selezione in yii2

Aug 22 2020

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 Networkscheda ricevo un errore Not Found (#404): Page not found.. Il URLgenerato è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

2 AnkitSingh Sep 12 2020 at 14:21

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è mdctafiffcartella e poi _slabBasedfile.

Quello che devi fare qui è creare un metodo di azione nel controller in modo da potervi accedere tramite route. Mi piace MdctariffControllere partialActionquindi nel corpo del partialActionmetodo è necessario chiamare il _slabBasedfile di visualizzazione. Inoltre puoi anche fare riferimentohttps://www.yiiframework.com/doc/guide/2.0/en/helper-url per Url :: toRoute ().