MVC 4,在视图中显示来自多个表和关联的数据作为列表
MVC 4, Displaying data from multiple tables & association in a view as a list
我无法从多个 table 获取数据以在视图中显示,主要是因为其中一个是关联 table。
您好,我有这 3 个 table 及其专栏
剧院
ID
说明
控件
ID
数字
说明
ThreatHasControl
威胁编号
控件 ID
我正在尝试创建一个视图来显示与所选威胁相关联的所有控件
因为我正在使用关联 table 我不确定如何获取我需要的数据。我想我需要以某种方式加入 tables。
我目前在我的存储库中有这个方法来获取 ThreatHasControl table 中的每个项目,这些项目与为所选威胁传递的 ID 相匹配
public IQueryable<ThreatHasControl> ThreatHasControl(int ThreatID)
{
_context = new RiskAssessmentApplicationEntities();
IQueryable<ThreatHasControl> ThreatControl = _context.ThreatHasControl.Where(t => t.ThreatID == ThreatID);
return ThreatControl;
}
我猜它在这里我需要做点别的事情。
我也有这个作为我的控制器
public ActionResult GetThreatControls(int ThreatID)
{
repository = new EFThreatRepository();
ViewModel MyModel = new ViewModel();
MyModel.ThreatHasControl = repository.ThreatHasControl(ThreatID);
List<ViewModel> ViewModelList = new List<ViewModel>();
ViewModelList.Add(MyModel);
return View(ViewModelList);
}
有人可以提供一些建议吗?提前致谢
您尝试过使用 ViewBag 吗?
http://www.codeproject.com/Articles/476967/WhatplusisplusViewData-2cplusViewBagplusandplusTem
它可以容纳任何物体...
你在视图中设置了吗:
@model System.Collections.Generic.List<ViewModel>
在页面顶部?并将其用作常规列表?
foreach(var ViewModel in Model)
{
....
}
我设法找到了我的问题的解决方案。
事实证明,我只需要增强 linq 查询导航路径,使其 select 并包含所需的 table / 数据
为了让事情更容易理解,我暂时从存储库中删除了该方法
GetThreatControls 操作方法
public ActionResult GetThreatControls(int ThreatID)
{
RiskAssessmentApplicationEntities _DBContext = new RiskAssessmentApplicationEntities();
ThreatHasControl ViewModel = new ThreatHasControl();
ViewModel.Threat = _DBContext.Threats.Single(x => x.ID == ThreatID);
ViewModel.Controls = _DBContext
.ThreatHasControl
.Include("ThreatHasControl.Control")
.Where(x => x.ThreatID == ThreatID)
.Select(x => x.Control);
return View(ViewModel);
}
我无法从多个 table 获取数据以在视图中显示,主要是因为其中一个是关联 table。
您好,我有这 3 个 table 及其专栏
剧院 ID 说明
控件 ID 数字 说明
ThreatHasControl 威胁编号 控件 ID
我正在尝试创建一个视图来显示与所选威胁相关联的所有控件
因为我正在使用关联 table 我不确定如何获取我需要的数据。我想我需要以某种方式加入 tables。
我目前在我的存储库中有这个方法来获取 ThreatHasControl table 中的每个项目,这些项目与为所选威胁传递的 ID 相匹配
public IQueryable<ThreatHasControl> ThreatHasControl(int ThreatID)
{
_context = new RiskAssessmentApplicationEntities();
IQueryable<ThreatHasControl> ThreatControl = _context.ThreatHasControl.Where(t => t.ThreatID == ThreatID);
return ThreatControl;
}
我猜它在这里我需要做点别的事情。
我也有这个作为我的控制器
public ActionResult GetThreatControls(int ThreatID)
{
repository = new EFThreatRepository();
ViewModel MyModel = new ViewModel();
MyModel.ThreatHasControl = repository.ThreatHasControl(ThreatID);
List<ViewModel> ViewModelList = new List<ViewModel>();
ViewModelList.Add(MyModel);
return View(ViewModelList);
}
有人可以提供一些建议吗?提前致谢
您尝试过使用 ViewBag 吗?
http://www.codeproject.com/Articles/476967/WhatplusisplusViewData-2cplusViewBagplusandplusTem
它可以容纳任何物体...
你在视图中设置了吗:
@model System.Collections.Generic.List<ViewModel>
在页面顶部?并将其用作常规列表?
foreach(var ViewModel in Model)
{
....
}
我设法找到了我的问题的解决方案。
事实证明,我只需要增强 linq 查询导航路径,使其 select 并包含所需的 table / 数据
为了让事情更容易理解,我暂时从存储库中删除了该方法
GetThreatControls 操作方法
public ActionResult GetThreatControls(int ThreatID)
{
RiskAssessmentApplicationEntities _DBContext = new RiskAssessmentApplicationEntities();
ThreatHasControl ViewModel = new ThreatHasControl();
ViewModel.Threat = _DBContext.Threats.Single(x => x.ID == ThreatID);
ViewModel.Controls = _DBContext
.ThreatHasControl
.Include("ThreatHasControl.Control")
.Where(x => x.ThreatID == ThreatID)
.Select(x => x.Control);
return View(ViewModel);
}