我正在尝试创建一个包含数据库中2个表的数据的视图。我查了几件事我试图使用ViewModel,但我无法让它工作。然后我考虑使用视图和部分视图来显示来自2个表的数据。使用ViewModel或使用视图和部分视图的最佳方法是什么?
此外,如果有人知道我的ViewModel出了什么问题,并想帮助那将是非常棒的。
我的两个模特:
public partial class prospect
{
public prospect()
{
this.result = new HashSet<result>();
}
public int id { get; set; }
public int testid { get; set; }
public string name { get; set; }
public string surname { get; set; }
public string email { get; set; }
public string cellnumber { get; set; }
public System.DateTime timestampstart { get; set; }
public Nullable<System.DateTime> timestampend { get; set; }
public Nullable<int> totalresult { get; set; }
public string birthdate { get; set; }
public string school { get; set; }
public Nullable<int> grade { get; set; }
public string address { get; set; }
public string cityandcode { get; set; }
public virtual ICollection<result> result { get; set; }
public virtual resultpersection resultpersection { get; set; }
}
public partial class resultpersection
{
public int id { get; set; }
public int prospectid { get; set; }
public int sectionid { get; set; }
public Nullable<int> result { get; set; }
public virtual prospect prospect { get; set; }
public virtual section section { get; set; }
}
我要展示的内容是: prospect.name,prospect.surname,prospect.totalresult以及此前景的每个部分的所有结果(来自结果表)
我的viewmodel:
namespace testAptitude.Models
{
public class ResultsPerProspect
{
public List<prospect> prospect { get; set; }
public List<resultpersection> resultPerSection { get; set; }
}
}
我的控制器
public ActionResult Index()
{
ResultsPerProspect vm = new ResultsPerProspect();
vm.prospect = (from p in db.prospect select p).ToList();
vm.resultPerSection = (from rps in db.resultpersection select rps).ToList(); ;
List<ResultsPerProspect> viewModelList = new List<ResultsPerProspect>();
viewModelList.Add(vm);
return View(viewModelList.AsEnumerable());
}
我的观点
@model IEnumerable<testAptitude.Models.ResultsPerProspect>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<table>
<thead>
<tr>
<th class="col-sm-3">
@Html.DisplayNameFor(model => model.prospect)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(model => item.prospect)
</td>
</tr>
}
</tbody>
</table>
我不能做item.prospect.name,因为它说它不包含名称的定义
现在显示的是:
前景
System.Collections.Generic.HashSet`1 [testAptitude.Models.result]
提前致谢!
答案 0 :(得分:1)
使用当前代码,您可以使用
访问它@Html.DisplayNameFor(model => model.FirstOrDefault().prospect)
您正在将IEnumerable<testAptitude.Models.ResultsPerProspect>
传递给您的视图,即类ResultsPerProspect
的多个对象。您需要遍历此List。此列表中的每个项目都将包含prospect
和resultPerSection
的定义。
或者您可以传递类ResultsPerProspect
的单个对象,因为您只是在列表中添加单个元素。
<强>更新强>
你有ResultsPerProspect列表。 ResultsPerProspect的每个项目都包含prospect
的列表和resultPerSection
的列表。因此,您需要首先迭代List Of ResultsPerProspect循环。在for循环中,for循环用于prospect
列表和resultPerSection
CODE
@foreach (var item in Model)
{
foreach (var pros in item.prospect)
{
<tr>
<td>
@Html.DisplayFor(model => pros.Name)
</td>
</tr>
}
}
答案 1 :(得分:0)
为什么不创建一个由两个(子)类组成的类(&#34;容器&#34;)(让我们说A和B)?然后,您可以创建一个Container对象,并将所需的对象放在Container.A和Container.B中。然后,您可以轻松地通过&#34; Container&#34;到您的视图并访问您的对象。