我是MVC的新手,并使用存储库模式尝试选择包含两个对象的数据以返回到强类型视图模型
,我有点纠结于最好的方法是什么
这两个表由一个customer id字段相关,我设置了一个存储库界面,以及一个强类型显示模板,该模板包含customer和customer Site对象的属性,我只需要显示customer表中的客户站点列表以及相关客户名称。
在显示模板中,我有以下
<%= Html.DisplayFor(x => x.Customers.CustomerName) %>
<%= Html.DisplayFor(x => x.Customers.Site.AddressLine1) %>
我有这个显示模板工作,但我的模型是空的。
我感到困惑的是如何在界面和存储库中定义这些数据,以及如何将数据返回到我的模型,简单地返回我的客户列表,我在界面中使用了这个
IQueryable<Customer> Customers { get; }
然后选择一个简单的LINQ。
但由于这些数据将同时包含客户和客户站点,我不确定如何在界面中定义这一点?
此外,LINQ联接是否是将这些数据返回到我的视图模型的合适方法?类似的东西
var Customers =
from c in customers
join cs in customerSites on c equals cs.CustomerId into ps
from p in ps
select new { Customer = c, cs.CustomerName };
更新===========
这是我在视图模型中使用的代码,它只被键入到显示模板中
public class CustomerViewModel
{
public int Id { get; set; }
public string CustomerName { get; set; }
public string PrimaryContactName { get; set; }
public SiteViewModel Site { get; set; }
}
它介绍了如何在存储库/控制器中用这两个对象填充模型,以显示在我难以处理的列表中。
您可能已经完成了以下所有步骤,因此如果已经完成,请忽略。。
1在您的解决方案中创建一个ViewModel文件夹。
2创建基础视图模型。。。。可能看起来像这样->
public class BaseViewModel { public PageProperties PageProperties { get; set; } public User User { get; set; } }
3为您的控制器操作设置一个视图模型,可能是这样->
public class ProjectVM : BaseViewModel { public ProjectPoco project { get; set; } }
4在你的控制器中,从你的仓库中获取数据,并将其传递给你的视图模型的一个实例,如下图所示->
var contextVM=新项目VM();
contextVM.project = ObjectExtensions.Convert<ProjectPoco>(tbl.Single(id)); contextVM.PageProperties = new PageProperties { Heading = contextVM.project.Name, SubHeading = "Details for" +
contextVM.project.Name};return View(contextVM);
5将您的视图模型设置为视图模型的视图模型->
@模型神经中枢。ViewModels。ProjectVM
6使用你的视图模型将数据提取到你的视图中->
@型号.项目.描述
通过视图模型将数据传递到视图的快速而粗略的描述。希望我没有错过任何东西。
至于数据。。看看你是如何拥有模型(Customers.Site.AddressLine1)的,难道不可能将客户从你的查询传递到你的视图模型吗?
所以你的视图模型可能看起来像。。
public class SomeViewModel: BaseViewModel { public List<Customer> Customers { get; set; } }
如果您让我们知道您正在使用什么进行数据访问,那么我们可能能够在将数据从表中取出并转换为您想要的格式方面提供更多帮助?