Asp.net mvc 4 从第一个记录集中访问数据
我有一个LINQ查询,它返回几行。它有一个联接,因此它包括公司联系信息和详细记录(因此每行都重复联系信息)。在我的查看页面上,我希望只在标题区域显示一次联系人信息,然后循环记录集以显示详细信息数据 如何访问第一条记录中的联系人数据而不循环 有更好的方法吗?我避免将所有联系人字段填充到ViewBag变量中,因为我认为用一个DB查询获取它们更为正确 顺便问一下,让代码块在这里工作的诀窍是什么。我总是单击“代码”按钮,然后直接从VS粘贴代码。有时颜色格式有效,有时无效Asp.net mvc 4 从第一个记录集中访问数据,asp.net-mvc-4,linq-to-entities,Asp.net Mvc 4,Linq To Entities,我有一个LINQ查询,它返回几行。它有一个联接,因此它包括公司联系信息和详细记录(因此每行都重复联系信息)。在我的查看页面上,我希望只在标题区域显示一次联系人信息,然后循环记录集以显示详细信息数据 如何访问第一条记录中的联系人数据而不循环 有更好的方法吗?我避免将所有联系人字段填充到ViewBag变量中,因为我认为用一个DB查询获取它们更为正确 顺便问一下,让代码块在这里工作的诀窍是什么。我总是单击“代码”按钮,然后直接从VS粘贴代码。有时颜色格式有效,有时无效 <fieldset
<fieldset>
<legend>Contact Information</legend>
<div class="view-field">
@Html.ValueFor(m => m.CompanyName)
</div>
<div class="view-field">
@Html.ValueFor(m => m.Name)
</div>
<div class="view-field">
@Html.ValueFor(m => m.Address1)
</div>
<div class="view-field">
@Html.ValueFor(m => m.City)
</div>
<div class="view-field">
@Html.ValueFor(m => m.State)
</div>
<div class="view-field">
@Html.ValueFor(m => m.Zip)
</fieldset>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(m => item.StatusDate)
</td>
<td>
@Html.DisplayFor(m => item.StatusName)
</td>
<td>
@Html.DisplayFor(m => item.StatusUserName)
</td>
<td>
@Html.DisplayFor(m => item.StatusNote)
</td>
</tr>
}
联系方式
@ValueFor(m=>m.CompanyName)
@ValueFor(m=>m.Name)
@ValueFor(m=>m.Address1)
@Html.ValueFor(m=>m.City)
@ValueFor(m=>m.State)
@ValueFor(m=>m.Zip)
@foreach(模型中的var项目)
{
@DisplayFor(m=>item.StatusDate)
@DisplayFor(m=>item.StatusName)
@DisplayFor(m=>item.StatusUserName)
@DisplayFor(m=>item.StatusNote)
}
编辑
利用boosss的想法,我提出了这个LINQ和ViewModel,但他们并没有给我一个有效的解决方案。我得到一个记录集,其中包含VendorStatusHistory记录的子集合,这正是我想要的,它在尝试显示viewmodel的任何属性时抛出错误“不包含定义……并且找不到扩展方法”。我尝试使用Boosss viewmodel,但它给出了相同的错误。我怀疑我的LINQ查询已关闭
已解决
根据boosss评论进行更新
public StatusHistoryView VendorStatusHistory(String id)
{
Guid pid = Guid.Parse(id);
StatusHistoryView query = _db.VendorProfiles
.Include("VendorStatusHistory")
.Include("StatusCodes")
.Select(s => new StatusHistoryView
{
ProfileID = s.ProfileID,
Name = s.Name,
CompanyName = s.CompanyName,
CompanyDBA = s.CompanyDBA,
Email = s.Email,
Phone = s.Phone,
Website = s.Website,
Address1 = s.Address1,
Address2 = s.Address2,
City = s.City,
State = s.State,
Zip = s.Zip,
VendorStatusHistory = s.VendorStatusHistories
}
)
.Where(x => x.ProfileID == pid).SingleOrDefault();;
return query;
}
public class StatusHistoryView
{
public StatusHistoryView()
{
this.VendorStatusHistory = new HashSet<VendorStatusHistory>();
}
public System.Guid ProfileID { get; set; }
public int StatusID { get; set; }
[Display(Name = "Full Name")]
public string Name { get; set; }
[Display(Name = "Email")]
public string Email { get; set; }
[Display(Name = "Phone")]
public string Phone { get; set; }
[Display(Name = "Website")]
public string Website { get; set; }
[Display(Name = "Company")]
public string CompanyName { get; set; }
[Display(Name = "DBA")]
public string CompanyDBA { get; set; }
[Display(Name = "Address")]
public string Address1 { get; set; }
[Display(Name = "Address (extra)")]
public string Address2 { get; set; }
[Display(Name = "City")]
public string City { get; set; }
[Display(Name = "State")]
public string State { get; set; }
[Display(Name = "Zip Code")]
public string Zip { get; set; }
public virtual ICollection<VendorStatusHistory> VendorStatusHistory { get; set; }
}
公共状态历史视图供应商状态历史(字符串id)
{
Guid pid=Guid.Parse(id);
StatusHistoryView查询=\u db.VendorProfiles
.包括(“卖方历史”)
.包括(“状态代码”)
.选择(s=>new StatusHistoryView
{
ProfileID=s.ProfileID,
Name=s.Name,
CompanyName=s.CompanyName,
CompanyDBA=s.CompanyDBA,
电子邮件=s.电子邮件,
电话,
网站=美国网站,
地址1=s.Address1,
地址2=s.Address2,
城市=南部城市,
州=美国州,
Zip=s.Zip,
VendorStatusHistory=s.VendorStatusHistory
}
)
.Where(x=>x.ProfileID==pid).SingleOrDefault();;
返回查询;
}
公共类状态历史视图
{
公共状态历史视图()
{
this.VendorStatusHistory=new HashSet();
}
public System.Guid ProfileID{get;set;}
public int StatusID{get;set;}
[显示(Name=“全名”)]
公共字符串名称{get;set;}
[显示(Name=“电子邮件”)]
公共字符串电子邮件{get;set;}
[显示(Name=“Phone”)]
公用字符串电话{get;set;}
[显示(Name=“网站”)]
公共字符串网站{get;set;}
[显示(Name=“Company”)]
公共字符串CompanyName{get;set;}
[显示(Name=“DBA”)]
公共字符串CompanyDBA{get;set;}
[显示(Name=“Address”)]
公共字符串地址1{get;set;}
[显示(Name=“地址(额外)”)]
公共字符串地址2{get;set;}
[显示(Name=“City”)]
公共字符串City{get;set;}
[显示(Name=“State”)]
公共字符串状态{get;set;}
[显示(名称=“邮政编码”)]
公共字符串Zip{get;set;}
公共虚拟ICollection供应商状态历史记录{get;set;}
}
更新后的视图
@model VendorProfileIntranet.Models.StatusHistoryView
<table id="VendorTable" width="100%" class="gradeA">
<thead>
@foreach (var item in Model.VendorStatusHistory)
{
<tr>
<th style="width:200px">
@Html.DisplayNameFor(m => item.DateCreated)
</th>
<th>
@Html.DisplayNameFor(m => item.Status)
</th>
<th>
@Html.DisplayNameFor(m => item.UserName)
</th>
<th>
@Html.DisplayNameFor(m => item.Notes)
</th>
</tr>
break;
}
</thead>
<tbody>
@foreach (var item in Model.VendorStatusHistory )
{
<tr>
<td>
@Html.DisplayFor(m => item.StatusDate)
</td>
<td>
@Html.DisplayFor(m => item.StatusName)
</td>
<td>
@Html.DisplayFor(m => item.StatusUserName)
</td>
<td>
@Html.DisplayFor(m => item.StatusNote)
</td>
</tr>
}
</tbody>
</tbody>
</table>
@model VendorProfileIntranet.Models.StatusHistoryView
@foreach(Model.VendorStatusHistory中的var项)
{
@DisplayNameFor(m=>item.DateCreated)
@DisplayNameFor(m=>item.Status)
@DisplayNameFor(m=>item.UserName)
@DisplayNameFor(m=>item.Notes)
打破
}
@foreach(Model.VendorStatusHistory中的var项)
{
@DisplayFor(m=>item.StatusDate)
@DisplayFor(m=>item.StatusName)
@DisplayFor(m=>item.StatusUserName)
@DisplayFor(m=>item.StatusNote)
}
我建议您不要将公司联系信息与详细记录一起加入,而是创建viewmodel并将其作为视图的模型传递,如下所示:
public class MyViewModel
{
public string CompanyName { get; set; }
public string Name { get; set; }
public string Address1 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public List<RecordDetail> Records { get; set; }
}
public class RecordDetail
{
public DateTime StatusDate { get; set; }
public string StatusName { get; set; }
public string StatusUserName { get; set; }
public string StatusNote { get; set; }
}
公共类MyViewModel
{
公共字符串CompanyName{get;set;}
公共字符串名称{get;set;}
公共字符串地址1{get;set;}
公共字符串City{get;set;}
公共字符串状态{get;set;}
公共字符串Zip{get;set;}
公共列表记录{get;set;}
}
公共类记录详细信息
{
公共日期时间状态日期{get;set;}
公共字符串StatusName{get;set;}
公共字符串StatusUserName{get;set;}
公共字符串StatusNote{get;set;}
}
此后
@model MyViewModel
<fieldset>
<legend>Contact Information</legend>
<div class="view-field">
@Html.ValueFor(m => m.CompanyName)
</div>
<div class="view-field">
@Html.ValueFor(m => m.Name)
</div>
<div class="view-field">
@Html.ValueFor(m => m.Address1)
</div>
<div class="view-field">
@Html.ValueFor(m => m.City)
</div>
<div class="view-field">
@Html.ValueFor(m => m.State)
</div>
<div class="view-field">
@Html.ValueFor(m => m.Zip)
</fieldset>
@foreach (var item in Model.Records)
{
<tr>
<td>
@Html.DisplayFor(m => item.StatusDate)
</td>
<td>
@Html.DisplayFor(m => item.StatusName)
</td>
<td>
@Html.DisplayFor(m => item.StatusUserName)
</td>
<td>
@Html.DisplayFor(m => item.StatusNote)
</td>
</tr>
}