【问题标题】:How to render view only after selection in yii2如何仅在 yii2 中选择后渲染视图
【发布时间】:2020-12-11 12:50:21
【问题描述】:

我在一个视图中渲染两个视图。

<?= $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>

默认情况下,两个 div 都是隐藏的,但它们都在渲染。但我只想在选择“基于平板”或TOU 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();

    }
});

注意:渲染表单后我也保存了

更新 1

我尝试通过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
        });
    }

参考:How to render partial using AJAX? Laravel 5.2

当我选择一个选项时,我无法查看表单。在我的Network 选项卡中,我收到错误Not Found (#404): Page not found.。生成的URLhttp://localhost/mdc/backend/web/mdctariff/_slabBased

在我的浏览器中粘贴此 URL 时,我遇到了同样的错误。我一定错过了一些我不知道的东西

如何仅在我选择一个选项时才呈现我的视图?

任何帮助将不胜感激。

【问题讨论】:

  • 使用 AJAX 并动态加载。
  • 所以你不想通过在正文中预加载表单来显示隐藏?
  • @MuhammadOmerAslam 是的,我只想在选择选项时显示表单
  • @Bizley 我已经尝试过,但仍然无法得到想要的结果。
  • 我无法理解您的问题,您想在页面加载时隐藏所有内容吗?你在routes\web.php 中指定了你的ajax 路径吗?

标签: javascript php jquery ajax yii2


【解决方案1】:

在您的网址中

$url = Url::toRoute(['/mdctariff/_slabBased','modelsTariffSlabs'=&gt;$modelsTariffSlabs]);

第一个参数应该是正确的现有路线。但是你已经把它写成一个目录的形式,即mdctafiff文件夹然后_slabBased文件。

这里你需要做的是,你需要在控制器中创建一个action方法,以便你可以通过路由访问它。就像MdctariffControllerpartialAction 一样,然后在partialAction 方法的主体中,您需要调用_slabBased 视图文件。此外,您还可以参考 here 获取 Url::toRoute()。

【讨论】:

  • 所以下拉选择我必须通过ajax调用那个特定的控制器?
  • 是的,Url::toRoute() 的第一个参数应该是 controllerName/actionName
猜你喜欢
  • 2017-05-07
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 2023-03-12
  • 2015-09-14
  • 2013-03-09
  • 1970-01-01
相关资源
最近更新 更多