【问题标题】:How to connect more than one model or more than one view model in a single razor view?如何在单个剃须刀视图中连接多个模型或多个视图模型?
【发布时间】:2018-12-17 08:14:21
【问题描述】:

我正在开发一个基本应用程序。

这是主控制器:

   public ActionResult Index()
    {
        var all = _context.mainz.ToList();
        var vm = new mainViewModel()
        {
            main_lst = all
        };

        return View(vm);
    }

    public ActionResult Details()
    {
        var dtl = _context.mainz.ToList();
        var vm = new mainViewModel()
        {
            main_lst = dtl
        };
        return View(vm);
    }


       public ActionResult count()
    {
        var ct = (from i in _context.mainz
                  where i.event_title != null
                  select i).ToList();
        var vm = new countVm()
        {
          count = ct
        };
        return View(vm);
    }

在这个控制器中,Index 和 Details 方法连接到两个不同的 razor 视图,如下所示:

这是索引的剃刀视图

@model testtt.ViewModel.mainViewModel

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}



<ul>
@foreach (var item in Model.main_lst)
{
    <li>@item.event_title</li>
}

</ul>

这是详细信息的剃须刀视图

@model testtt.ViewModel.mainViewModel
@{
ViewBag.Title = "Details";
Layout = "~/Views/Shared/_Layout.cshtml";
 }

<ul>
@foreach (var item in Model.main_lst)
{
   <li>@item.event_description</li>
}
</ul>

这是主视图模型

namespace testtt.ViewModel
{
public class mainViewModel
{
    public List<main> main_lst { get; set; }
    public mainViewModel()
    {
        main_lst = new List<main>();
    }
}
}

现在在上面的主控制器中,如果您注意到我有第三种方法作为计数,它连接到部分视图,如下所示:

@model testtt.ViewModel.countVm
<p>count is @Model.count.Count()</p>

而countVm or (count view model)如下:

namespace testtt.ViewModel
{
public class countVm
{
    public List<main> count { get; set; }
    public countVm()
    {
        count = new List<main>();
    }
}
}

到目前为止一切正常, 现在根据应用程序要求,我必须将此计数部分视图添加到所有其他剃须刀视图,如下所示:

 @Html.Partial("count")

但是当我将它添加到索引或详细信息剃须刀视图中时,它会生成错误:

The model item passed into the dictionary is of type 'testtt.ViewModel.mainViewModel', but this dictionary requires a model item of type 'testtt.ViewModel.countVm'.

现在让我们说这个计数方法有一些相同的数据必须传递给所有其他剃须刀视图,但不能单独传递,因为单独传递将是耗时的,并且假设明天由于任何原因如果逻辑被更新那么我必须单独访问每一个方法,并且必须相应地更新它们,如果我们假设超过 100 个方法,这是不可能的。

简而言之,我正在寻找一种方法来从单个剃刀视图中的两个视图模型中检索数据?

【问题讨论】:

标签: c# razor model-view-controller


【解决方案1】:

除了调用局部视图,您可以调用 Action 来返回填充模型的局部视图:

@Html.Action("count","controllername")

或者,我们可以在主视图模型中添加该计数视图模型作为属性,然后在渲染时将其传递给局部视图:

@Html.Partial("count",Model.CountVM)

在主视图模型中你可以拥有它:

public class mainViewModel
{
    public List<main> main_lst { get; set; }

    public countVm CountVM { get; set; }
    public mainViewModel()
    {
        main_lst = new List<main>();
    }
}

【讨论】:

  • 非常感谢,很有帮助
猜你喜欢
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2020-02-19
相关资源
最近更新 更多