【问题标题】:Conditionally Pass Data from Enclosing View to Partial View有条件地将数据从封闭视图传递到部分视图
【发布时间】:2019-01-17 11:52:09
【问题描述】:

我的要求

我需要在选择下拉列表时呈现部分视图

  • 在页面加载(来自控制器)时,我拥有部分视图所需的所有数据(视图模型)
  • 所有部分视图都需要从View(cshtml)的viewmodel中获取相同的数据
  • 在选择下拉列表值时,需要呈现所需的局部视图(在下面 1-4 中给出)。

渲染局部视图 1

@{
    Html.RenderPartial("_Dashboard", new Dashboard.Web.Models.SignalDataViewModel { dData = Model.dData });
 }

渲染局部视图 2

@{
   Html.RenderPartial("_Dashboard_Graph", new Dashboard.Web.Models.SignalDataViewModel { dData = Model.dData });
 }

渲染局部视图 3

@{
   Html.RenderPartial("_Dashboard_Arrow", new Dashboard.Web.Models.SignalDataViewModel { dData = Model.dData });
}

渲染局部视图 4

@{
   Html.RenderPartial("_Dashboard_Custom", new Dashboard.Web.Models.SignalDataViewModel { dData = Model.dData });
 }

我的查询

请建议我应该如何根据下拉列表的选择有条件地渲染部分视图(从具有相同 ViewModel 的部分视图列表中),同时拥有视图中已经可用的部分视图的数据(cshtml-parent)视图模型

【问题讨论】:

  • 为什么不直接在下拉菜单上粘贴一个 onChange 并调用一个 JavaScript 函数来检查传递给它的值并以这种方式返回一个 partialView?
  • 好的但是在java脚本中我应该如何传递现有的模型数据(比如上面提到的dData)来填充_partialView并替换现有的_partialView

标签: javascript c# jquery asp.net-mvc razor


【解决方案1】:

通过 html 完成所有这些工作。我建议使用 javascript。

  • 有一个具有 ID 的 div,例如

    <div id="InterchangableView"></div>
    
  • 将 onChange 事件添加到下拉列表中,并将下拉列表的值传递给 javascript 函数

  • 在函数中确定它是什么值并调用必要的控制器方法,如下所示

    if(id == 1)
    {
        var json = '{controllerParam: ' + id + '}';
    
        $.ajax({
            url:'@Url.Action("Action", "Controller")',
            type:'POST',
            data: json,
            contentType:'Application/json',
            success:fucntion(result){
                $("#InterchangableView").html(result);
            }
        });
    }
    
  • 在控制器动作中,根据传递给它的结果,进行检查并以这种方式返回正确的 partialView。

每次下拉列表更改时,都应该调用 javascript,它应该返回一个 partialView,它应该覆盖该 Id 所在的 div 中的任何内容。

【讨论】:

  • 当页面被加载(从控制器)时,页面具有填充部分视图所需的所有数据。此外,所有部分视图都获得相同的 _modeldata - 即来自父视图的模型 - 因为所有部分视图显示相同的数据(值和 timeSent) - 只有部分视图的图像\​​小部件不同。在这种情况下,我不需要调用 ajax 来获取数据。有数据已经​​在视图的模型中如何使用 jquery 来完成这个?请建议。
【解决方案2】:

我终于做了一些工作来实现这个。

在 JavaScript 的下拉选择中,我通过 ajax 调用将模型数据传递给返回部分视图的控制器。 在 Controller 中,决定了正确的局部视图,并将该局部视图作为 html 数据返回给我的 ajax 调用,我用它来替换所需的(局部视图)div。

【讨论】:

    猜你喜欢
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多