Asp.net mvc 在MVC ASP.NET中从多个表检索数据
我有一个ViewModel,它是我使用基本模型制作的。我还能够将数据插入表中 我现在要检索数据并显示在我的表单上。我应该在我的索引视图中写什么代码 我的ViewModel由两个不同基础模型的属性组成。因此,在视图中,当我尝试使用我的ViewModel中的属性获取信息时,会出现“对象未设置为对象实例”错误Asp.net mvc 在MVC ASP.NET中从多个表检索数据,asp.net-mvc,indexing,viewmodel,Asp.net Mvc,Indexing,Viewmodel,我有一个ViewModel,它是我使用基本模型制作的。我还能够将数据插入表中 我现在要检索数据并显示在我的表单上。我应该在我的索引视图中写什么代码 我的ViewModel由两个不同基础模型的属性组成。因此,在视图中,当我尝试使用我的ViewModel中的属性获取信息时,会出现“对象未设置为对象实例”错误 代码如下: 视图模型类: public class VideoContextViewModel { public string VideoName { get; set; }
代码如下: 视图模型类:
public class VideoContextViewModel
{
public string VideoName { get; set; }
public string DescriptionVideo { get; set; }
public string actor { get; set; }
public HttpPostedFileBase references { get; set; }
}
基本模型类:
public class video
{
public int ID { get; set; }
public string VideoName { get; set; }
public string DescriptionVideo { get; set; }
public string FilmName { get; set; }
public int ratings { get; set; }
}
public class videoDetails
{
public int VideoDetailsID { get; set; }
public string actor { get; set; }
public byte[] reference { get; set; }
public int ID { get; set; }
public virtual video Video { get; set; }
}
@model IEnumerable< ConnectDatabase. VideoContextViewModel>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.VideoName)
</td>
<td>
@Html.DisplayFor(modelItem => item.DescriptionVideo)
</td>
<td>
@Html.DisplayFor(modelItem => item.actor)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ })
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ })
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
</td>
</tr>
}
索引视图:
public class video
{
public int ID { get; set; }
public string VideoName { get; set; }
public string DescriptionVideo { get; set; }
public string FilmName { get; set; }
public int ratings { get; set; }
}
public class videoDetails
{
public int VideoDetailsID { get; set; }
public string actor { get; set; }
public byte[] reference { get; set; }
public int ID { get; set; }
public virtual video Video { get; set; }
}
@model IEnumerable< ConnectDatabase. VideoContextViewModel>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.VideoName)
</td>
<td>
@Html.DisplayFor(modelItem => item.DescriptionVideo)
</td>
<td>
@Html.DisplayFor(modelItem => item.actor)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ })
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ })
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
</td>
</tr>
}
@model IEnumerable
@ActionLink(“新建”、“创建”)
@foreach(模型中的var项目){
@DisplayFor(modelItem=>item.VideoName)
@DisplayFor(modelItem=>item.DescriptionVideo)
@DisplayFor(modelItem=>item.actor)
@ActionLink(“编辑”,“编辑”,新的{/*id=item.PrimaryKey*/})
@ActionLink(“详细信息”,“详细信息”,新的{/*id=item.PrimaryKey*/})
@ActionLink(“删除”,“删除”,新的{/*id=item.PrimaryKey*/})
}
当我运行解决方案时,会出现以下错误:
对象不能设置为对象的实例。我将鼠标悬停在foreach循环中的“Model”上,它显示为Null
因此,为了显示两个表中的数据,我应该在这里写些什么?这里是一个示例,您可以尝试以下方法:
public class Equipment
{
[Key] public int EquipID { get; set; }
public string EquipName { get; set; }
public string EquipDescription { get; set; }
public string EquipSerialNumber { get; set; }
public string EquipImage { get; set; }
public string EquipManufacturor { get; set; }
public string EquipLocation { get; set; }
public string EquipCalibrationFreq { get; set; }
public virtual ICollection<Calibration> Calibrations { get; set; }
}
public class Calibration
{
[Key] public int RecID { get; set; }
public int EquipID { get; set; }
public DateTime CalibrationDate { get; set; }
public decimal? CalibrationCost { get; set; }
public int ContactID { get; set; }
public String CalibrationCert { get; set; }
public DateTime NextCalibrationDue { get; set; }
public String ResponsibleSection { get; set; }
public virtual Contact Contact { get; set; }
public virtual Equipment Equipment { get; set; }
}
public class CalibrationContext:DbContext
{
public DbSet<Equipment> Equipments { get; set; }
public DbSet<Calibration> Calibrations { get; set; }
public DbSet<Contact> Contacts { get; set; }
public DbSet<RFQ> RFQs { get; set; }
public DbSet<RFQDetails> RFQDetails { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
这里是详细信息视图
@model QA.Models.Equipment
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<fieldset>
<legend>Equipment</legend>
<div class="display-label">Equipment Name: </div>
<div class="display-field">@Html.DisplayFor(model => model.EquipName)</div>
<div class="display-label">EquipDescription: </div>
<div class="display-field"> @Html.DisplayFor(model => model.EquipDescription)</div>
<div class="display-label">Serial Number</div>
<div class="display-field">
@Html.DisplayFor(model => model.EquipSerialNumber)
</div>
<div class="display-label">Image</div>
<div class="display-field">
@if(! string.IsNullOrEmpty(Model.EquipImage)){
<img src="@Url.Content("~/Content/EquipImages/" + System.IO.Path.GetFileName(Model.EquipImage))" alt="" width="70" height="70"/>
}else{
<img src="@Url.Content("~/Content/EquipImages/NoImage.jpg")" alt="" width="70" height="70"/>
}
</div>
<div class="display-label">Manufacturor</div>
<div class="display-field">
@Html.DisplayFor(model => model.EquipManufacturor)
</div>
<div class="display-label">Location</div>
<div class="display-field">
@Html.DisplayFor(model => model.EquipLocation)
</div>
<div class="display-label">Calibration Frequency</div>
<div class="display-field">
@Html.DisplayFor(model => model.EquipCalibrationFreq)
</div>
<div class="display-label">
<b> @Html.LabelFor(model => model.Calibrations)</b>
</div>
<div class="display-field">
<table>
<tr>
<th>Calibration Date</th>
<th>Calibrated By</th>
<th>Calibration Cost</th>
<th>Next Calibration Due on</th>
<th>Calibration Certificate</th>
</tr>
@foreach (var item in Model.Calibrations)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.CalibrationDate)</td>
<td>@Html.DisplayFor(modelItem => item.Contact.CompanyName) </td>
<td>@Html.DisplayFor(modelItem => item.CalibrationCost)</td>
<td>@Html.DisplayFor(modelItem => item.NextCalibrationDue)</td>
<td> @if (item.Contact != null)
{
<a href = @Url.Action("ViewCertificate", new { fileName = item.CalibrationCert }) > <img src = "@Url.Content("~/Content/Icons/pdf.jpg")" alt = "attachment" /> </a>
}</td>
</tr>
}
</table>
</div>
</fieldset>
<p>
@Html.ActionLink("Edit", "Edit", new { id=Model.EquipID }) |
@Html.ActionLink("Back to List", "Index")
</p>
@model QA.Models.Equipment
@{
ViewBag.Title=“详细信息”;
}
细节
装备
设备名称:
@DisplayFor(model=>model.EquipName)
设备说明:
@DisplayFor(model=>model.EquipDescription)
序列号
@DisplayFor(model=>model.EquipSerialNumber)
形象
@如果(!string.IsNullOrEmpty(Model.EquipImage)){
}否则{
}
制造商
@DisplayFor(model=>model.equipmanufacturer)
位置
@DisplayFor(model=>model.EquipLocation)
校准频率
@Html.DisplayFor(model=>model.EquipCalibrationFreq)
@LabelFor(model=>model.Calibrations)
校准日期
校准人
校准成本
下次校准将于
校准证书
@foreach(模型校准中的var项)
{
@DisplayFor(modelItem=>item.CalibrationDate)
@DisplayFor(modelItem=>item.Contact.CompanyName)
@DisplayFor(modelItem=>item.CalibrationCost)
@DisplayFor(modelItem=>item.NextCalibrationDue)
@如果(item.Contact!=null)
{
}
}
@ActionLink(“编辑”,“编辑”,新的{id=Model.EquipID})|
@ActionLink(“返回列表”、“索引”)
请发布一些代码。