ViewModel 未正确传递信息 Asp.net Core MVC
ViewModel not passing information correctly Asp.net Core MVC
我对 Asp.net 核心 MVC 还很陌生,花了几天时间研究它,但我找不到我的错误。
我只是想将数据从 ViewModel 传递到视图中的 table,但 ViewModel 没有填充数据。
这是我的代码:
我目前正在使用的模型(其他看起来相同,但列不同):
using System;
using System.Collections.Generic;
namespace Seating.Models
{
public partial class Dth
{
public int Id { get; set; }
public DateTime TimeEntered { get; set; }
public DateTime? TimeCleared { get; set; }
public bool? EmpSent { get; set; }
public int EmployeeId { get; set; }
public int EmpPosition { get; set; }
public int? RlfPosition { get; set; }
public virtual Position EmpPositionNavigation { get; set; }
public virtual Employee Employee { get; set; }
public virtual Position RlfPositionNavigation { get; set; }
}
}
虚拟机:
using Seating.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Seating.ViewModels
{
public class ListsVM
{
public IEnumerable<Dth> Dths { get; set; }
public IEnumerable<Break> Breaks { get; set; }
public IEnumerable<Lunch> Lunches { get; set; }
public IEnumerable<Employee> Employees { get; set; }
public IEnumerable<Position> Positions { get; set; }
}
}
控制器:
using Seating.Models;
using Seating.ViewModels;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
namespace Seating.Controllers
{
public class HomeController : Controller
{
private readonly db_a7e17a_seatingContext _context = new db_a7e17a_seatingContext();
public HomeController(db_a7e17a_seatingContext context)
{
_context = context;
}
public ActionResult Index()
{
var tables = new ListsVM
{
Employees = _context.Employees.ToList(),
Dths = _context.Dths.Where(n => n.TimeCleared == null).ToList(),
Breaks = _context.Breaks.Where(n => n.TimeCleared == null).ToList(),
Lunches = _context.Lunches.Where(n => n.TimeCleared == null).ToList(),
Positions = _context.Positions.ToList()
};
return View(tables);
}
并查看:
@model IEnumerable<Seating.ViewModels.ListsVM>
@{
ViewData["Title"] = "Home Page";
}
<div class="card" style="width: 18rem;">
<div class="card-header text-center">
DTH
</div>
<table class="table table-sm">
<tbody>
@foreach (var item in Model.Dths)
{
<tr>
@item.EmployeeId
</tr>
}
</tbody>
</table>
</div>
我收到一条错误消息,提示 'IEnumerable' 不包含接受第一个 'IEnumerable' 类型参数的定义。
我尝试在 VM 中将“IEnumerable”更改为“List”。我已经阅读了很多关于 Whosebug 的解决方案。我学习了一些教程,这些教程向我展示了如何进行设置。据我所知,我正在严格按照教程代码进行操作,甚至认为我显然不在某个地方。
我将视图中的模型引用更改为 @model IEnumerable 而不是 VM。这非常有效。所以我假设我在 VM 上做错了,因为它可以直接引用模型而无需通过 VM。
对我做错了什么有什么想法吗?
您正在创建一个 ListsVM
类型的对象,其中包含不同种类实体的列表。这个对象通过 View(tables)
传递给视图。但是在视图中,您将模型声明为对象集合 ListsVM
: @model IEnumerable<Seating.ViewModels.ListsVM>
您是否尝试将模型声明更改为 @model Seating.ViewModels.ListsVM
?
如果将视图模型声明为 @model Seating.ViewModels.ListsVM
,则 Model.Dths
将引用正确的集合并且 @foreach (var item in Model.Dths)
将正确枚举此集合。
我对 Asp.net 核心 MVC 还很陌生,花了几天时间研究它,但我找不到我的错误。
我只是想将数据从 ViewModel 传递到视图中的 table,但 ViewModel 没有填充数据。
这是我的代码:
我目前正在使用的模型(其他看起来相同,但列不同):
using System;
using System.Collections.Generic;
namespace Seating.Models
{
public partial class Dth
{
public int Id { get; set; }
public DateTime TimeEntered { get; set; }
public DateTime? TimeCleared { get; set; }
public bool? EmpSent { get; set; }
public int EmployeeId { get; set; }
public int EmpPosition { get; set; }
public int? RlfPosition { get; set; }
public virtual Position EmpPositionNavigation { get; set; }
public virtual Employee Employee { get; set; }
public virtual Position RlfPositionNavigation { get; set; }
}
}
虚拟机:
using Seating.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Seating.ViewModels
{
public class ListsVM
{
public IEnumerable<Dth> Dths { get; set; }
public IEnumerable<Break> Breaks { get; set; }
public IEnumerable<Lunch> Lunches { get; set; }
public IEnumerable<Employee> Employees { get; set; }
public IEnumerable<Position> Positions { get; set; }
}
}
控制器:
using Seating.Models;
using Seating.ViewModels;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
namespace Seating.Controllers
{
public class HomeController : Controller
{
private readonly db_a7e17a_seatingContext _context = new db_a7e17a_seatingContext();
public HomeController(db_a7e17a_seatingContext context)
{
_context = context;
}
public ActionResult Index()
{
var tables = new ListsVM
{
Employees = _context.Employees.ToList(),
Dths = _context.Dths.Where(n => n.TimeCleared == null).ToList(),
Breaks = _context.Breaks.Where(n => n.TimeCleared == null).ToList(),
Lunches = _context.Lunches.Where(n => n.TimeCleared == null).ToList(),
Positions = _context.Positions.ToList()
};
return View(tables);
}
并查看:
@model IEnumerable<Seating.ViewModels.ListsVM>
@{
ViewData["Title"] = "Home Page";
}
<div class="card" style="width: 18rem;">
<div class="card-header text-center">
DTH
</div>
<table class="table table-sm">
<tbody>
@foreach (var item in Model.Dths)
{
<tr>
@item.EmployeeId
</tr>
}
</tbody>
</table>
</div>
我收到一条错误消息,提示 'IEnumerable' 不包含接受第一个 'IEnumerable' 类型参数的定义。
我尝试在 VM 中将“IEnumerable”更改为“List”。我已经阅读了很多关于 Whosebug 的解决方案。我学习了一些教程,这些教程向我展示了如何进行设置。据我所知,我正在严格按照教程代码进行操作,甚至认为我显然不在某个地方。
我将视图中的模型引用更改为 @model IEnumerable
对我做错了什么有什么想法吗?
您正在创建一个 ListsVM
类型的对象,其中包含不同种类实体的列表。这个对象通过 View(tables)
传递给视图。但是在视图中,您将模型声明为对象集合 ListsVM
: @model IEnumerable<Seating.ViewModels.ListsVM>
您是否尝试将模型声明更改为 @model Seating.ViewModels.ListsVM
?
如果将视图模型声明为 @model Seating.ViewModels.ListsVM
,则 Model.Dths
将引用正确的集合并且 @foreach (var item in Model.Dths)
将正确枚举此集合。