如何解决如何传递列表SQL连接以在C#中查看?
在我的控制器中,我返回一个列表,该列表是联接2个表的结果。现在,我想将此列表传递给我的视图,但不能执行此操作。发生此类错误:
System.Collections.Generic.List1 [ f__AnonymousType2 [System.String,System.String,System.String,...等等,等等],此词典需要类型为 System的元素。 Collections.Generic.IEnumerable [XYZ.Models.MyModelTable]。
public ActionResult someAction()
{
BASEdb db = new BASEdb();
var model = db.MyModelTable
.Join(db.Customers,z => z.FOPKTO_,k => k.ID,(z,k) => new { FOPKTO = z,Customers = k })
.Where(w => w.FOPKTO.Date == null)
.Select(s => new
{
s.Customers.Name,s.MyModelTable.FOPKTO,s.MyModelTable.FOPBDA,s.MyModelTable.FOPGSS,})
.ToList();
return View(model);
}
和我的观点:
@model IEnumerable<XYZ.Models.MyModelTable>
@{
ViewBag.Title = "Invoices";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Invoices</h2>
<table class="table">
<tr>
<th>
@Html.displayNameFor(model => model.FOPBDA)
</th>
<th>
@Html.displayNameFor(model => model.FOPLBN)
.... etc. (there's foraeach instruction below as well)
如何将从2个表返回数据的列表传递给View?我的视图现在采用一个表的类型(MyModelTable)? 我认为应该是更通用的类型,但不知道如何解决它
解决方法
您应该为视图创建一个ViewModel
。这将是您的视图专用的数据结构,也可以是其他两个模型的组合。
网络上的大量信息,这是StackOverflow的示例:
您这样做的方式不是创建IEnumerable<XYZ.Models.MyModelTable>
(视图中期望的类型),而是创建匿名类型列表。
我们称之为MyViewModel
。您可以这样声明:
public class MyViewModel(){
public string Name {get;set;}
public int FOPKTO {get;set;}
public int FOPBDA {get;set;}
public int FOPGSS {get;set;}
}
然后在您的控制器中,将其构建为:
var model = db.MyModelTable
.Join(db.Customers,z => z.FOPKTO_,k => k.ID,(z,k) => new { FOPKTO = z,Customers = k })
.Where(w => w.FOPKTO.Date == null)
.Select(s => new MyViewModel
{
Name = s.Name,FOPKTO = s.FOPKTO,FOPBDA = s.FOPBDA,FOPGSS = s.FOPGSS
})
.ToList();
return View(model);
然后更新视图以使用此视图模型代替以前的模型。
,这是一个猜测,因为您没有显示MyModelTable
类,但是您可能需要执行以下操作:
var models = db.MyModelTable
.Join(db.Customers,Customers = k })
.Where(w => w.FOPKTO.Date == null)
.Select(s => new MyModelTable
{
Name = s.Customers.Name,FOPKTO = s.MyModelTable.FOPKTO,FOPBDA = s.MyModelTable.FOPBDA,FOPGSS = s.MyModelTable.FOPGSS,})
.ToList();
,
创建类似于MyViewModel的ViewModel类型。
public class MyViewModel(){
public string Name { get; set; }
public int FOPKTO { get; set; }
public int FOPBDA { get; set; }
public int FOPGSS { get; set; }
}
并选择要列出的内容。
BASEdb db = new BASEdb();
var model = db.MyModelTable
.Join(db.Customers,Customers = k })
.Where(w => w.FOPKTO.Date == null)
.Select(s => new MyViewModel
{
Name = s.Customers.Name,FOPGSS = s.MyModelTable.FOPGSS
})
.ToList();
return View(model);
并将您的Views模型类型更改为MyViewModel
@model IEnumerable<MyViewModel>
... etc
,
简而言之,创建一个模型类。在该模型中定义属性。在您的控制器操作中填充该模型类的实例,然后返回到您的视图...简单。
请不要忘记将其作为答案:)谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。