我是MVC新手并使用存储库模式尝试选择包含两个对象的数据以返回强类型视图模型,
我有点担心最好的方法是,
这两个表通过客户ID字段相关联,我有一个存储库接口设置,以及一个强显类型的显示模板,其中包含Customer和Customer Site对象的属性的viewmodel,我只需要显示客户站点列表以及customers表中的相关客户名称。
在显示模板中,我有以下
<%= Html.DisplayFor(x => x.Customers.CustomerName) %>
<%= Html.DisplayFor(x => x.Customers.Site.AddressLine1) %>
我有这个显示模板,但我的模型是空的。
我很困惑的是如何在界面和存储库中定义这些数据,以及如何将数据返回到我的模型,只需返回我在我的界面中使用它的客户列表
IQueryable<Customer> Customers { get; }
然后进行简单的LINQ选择。
但是,由于这些数据将包含客户和客户网站,我不确定如何在界面中定义它?
LINQ连接也是将数据返回到viewmodel的合适方法吗?
之类的东西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 };
UPDATE ======
这是我在视图模型中使用的代码,该代码被严格键入显示模板,
public class CustomerViewModel
{
public int Id { get; set; }
public string CustomerName { get; set; }
public string PrimaryContactName { get; set; }
public SiteViewModel Site { get; set; }
}
它如何在存储库/控制器中填充模型,两个对象都显示在我正在努力的列表中。
答案 0 :(得分:0)
你可能已经完成了以下步骤,所以如果你有......请忽略。
1在您的解决方案中创建一个ViewModel文件夹。
2创建基本视图模型....可能看起来像这样 - &gt;
public class BaseViewModel { public PageProperties PageProperties { get; set; } public User User { get; set; } }
3为控制器操作设置视图模型可能是这样的 - &gt;
public class ProjectVM : BaseViewModel { public ProjectPoco project { get; set; } }
4在您的控制器中从您的存储库中获取数据并将其传递给您的视图模型实例,如下所示 - &gt;
var contextVM = new ProjectVM();
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将您的观看模型设置为您的视图模型 - &gt;
@model NerveCentre.ViewModels.ProjectVM
6使用您的viewmodel将数据提取到您的视图中 - &gt;
@ Model.project.Description
通过视图模型将数据传递到视图的快速粗略描述。希望我不会错过任何事情。
至于数据..看看你如何拥有模型(Customers.Site.AddressLine1),是否不仅可以将客户从查询传递到视图模型?
所以你的viewmodel可能看起来像..
public class SomeViewModel: BaseViewModel { public List<Customer> Customers { get; set; } }
如果您告诉我们您用于数据访问的内容,那么我们可以帮助您更多地了解从表格中获取数据并获得所需格式的具体信息?