【问题标题】:Send to my view a class that contains 2 object lists将包含 2 个对象列表的类发送到我的视图
【发布时间】:2018-12-01 12:09:54
【问题描述】:

我的目标是:向我的视图发送一个包含 2 个对象列表的类

为此,这是我尝试继续的方式:

  1. 我调用了数据库,它返回给我我所有事件的列表。
  2. 我再次调用数据库,它返回给我所有子事件的列表。
  3. 我有一个 EventViewModel 类,它包含一个 List <_eventslines> 类和一个 List <_subeventslines> 类。
  4. 我需要在一个视图中发送这 2 个查询的结果,但我不知道该怎么做(如果可能的话)

我连接到一个 DB Filemaker,它基于一个视图,这就是我必须进行 2 次调用的原因。

但是我想将这 2 个调用的结果放在同一个对象 (oEventViewModel) 中,以便将它们发送回我的视图。

你有解决办法吗?

控制器

[Authorize]
[HttpGet]
public async Task<ActionResult> Index()
{
    ViewBag.sessionv = HttpContext.Session.GetInt32("idMember");
    FileMakerRestClient client = new FileMakerRestClient(serverName, fileName, userName, password);
    var toFind = new Models.EventsLines { Zkf_CTC = 1053 };
    var results = await client.FindAsync(toFind);

    Models.EventViewModel oEventViewModel = new Models.EventViewModel
    {
        _EventsLines = (from o in results select o).ToList()
    };

    var xtoFind = new Models.SubEventsLines { Zkf_CTC = 1053 };
    var xresults = await client.FindAsync(xtoFind);

    Models.EventViewModel oSubEventViewModel = new Models.EventViewModel
    {
        _SubEventsLines = (from x in xresults select x).ToList()
    };


    ViewBag.Zkf_CTC = 1053;
    ViewBag.JsonList = oEventViewModel;

    return View(oEventViewModel);
}

型号

public class EventViewModel
{
    public List<EventsLines> _EventsLines { get; set; }
    public List<SubEventsLines> _SubEventsLines { get; set; }
}

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    有多种方法可以在一个视图中使用多个模型。这里我将一一解释。

    1.使用动态模型 ExpandoObject(System.Dynamic 命名空间)是一个添加到 .Net Framework 4.0 的类,它允许我们在运行时动态地在对象上添加和删除属性。我们可以将这个动态创建的对象传递给教师和学生的视图和渲染列表。

    2。使用视图模型 ViewModel 只不过是一个可能有多个模型的类。它包含多个模型作为属性。它不应包含任何方法。

    3.使用 ViewData ViewData 用于将数据从控制器传输到视图。 ViewData 是一个字典对象,可以使用字符串作为键进行访问。使用 ViewData,我们可以将任何对象从控制器传递到视图。在视图中枚举时需要类型转换代码。

    4.使用 ViewBag ViewBag 与 ViewData 类似,也用于将数据从控制器传输到视图。 ViewBag 是一个动态属性。 ViewBag 只是 ViewData 的一个包装器。

    5.使用元组 Tuple 对象是不可变的、固定大小的有序序列对象。它是一种具有特定数量和元素序列的数据结构。 .NET 框架支持最多七个元素的元组。

    6.使用渲染动作方法 局部视图定义或呈现视图中的局部视图。我们可以通过使用 Html.RenderAction 方法调用控制器操作方法来渲染视图的某些部分。当我们想要在局部视图中显示数据时,RenderAction 方法非常有用。这种方法的缺点是控制器只有多次调用。

    更多详情请参考下文提到的link

    【讨论】:

      【解决方案2】:

      好的,我只需要像这样修改我的代码,现在它可以工作了:

      [Authorize]
      [HttpGet]
      public async Task<ActionResult> Index()
      {
          ViewBag.sessionv = HttpContext.Session.GetInt32("idMember");
          FileMakerRestClient client = new FileMakerRestClient(serverName, fileName, userName, password);
          var toFind = new Models.EventsLines { Zkf_CTC = 1053 };
          var results = await client.FindAsync(toFind);
      
          var xtoFind = new Models.SubEventsLines { Zkf_CTC = 1053 };
          var xresults = await client.FindAsync(xtoFind);
      
          Models.EventViewModel oEventViewModel = new Models.EventViewModel
          {
              _EventsLines = (from o in results select o).ToList(),
              _SubEventsLines = (from x in xresults select x).ToList()
          };
      
          ViewBag.Zkf_CTC = 1053;
          return View(oEventViewModel);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-09
        • 2019-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多