Просматривая Google, чтобы найти примеры использования установки MVC Crud, я всегда нахожу, что страница с подробностями пропускается как важная, особенно если вы хотите использовать модель представления.
Проблема, с которой я столкнулся, заключается в том, что типичная установка приложения MVC из Visual Studio будет использовать CRUD, но на всех страницах представления будет использоваться модель домена, а не модель представления.
Итак, я хочу получить данные из двух моделей на основе целого числа легко, если это одна модель:
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Asset Assets = db.Assets.Find(id);
if (id == null)
{
return HttpNotFound();
}
return View();
}
Но тогда как мне взять два комплекта? Вот мой запрос linq о модели представления:
var ASSPATVM = (from s in db.Assets
join cp in db.PATs on s.AssetID equals cp.AssetID into AP
from subpat in AP.DefaultIfEmpty()
select new ASSPATVM
{
AssetID = s.AssetID,
ProductName = s.ProductName,
ModelName = s.ModelName,
SupplierName = s.SupplierName,
ManufacturerName = s.ManufacturerName,
SerialNo = s.SerialNo,
PurchaseDate = s.PurchaseDate,
PoNo = s.PoNo,
Costing = s.Costing,
TeamName = s.TeamName,
StaffName = s.StaffName,
InspectionDocumnets = subpat.InspectionDocumnets ?? String.Empty,
InspectionOutcomeResult = subpat.InspectionOutcomeResult
});
EDIT
Итак, я попробовал:
public ActionResult Details(int? AssetID)
{
var ASSPATINCVM = (from s in db.Assets
join cp in db.PATs on s.AssetID equals cp.AssetID into AP
from subASSPAT in AP.DefaultIfEmpty()
join ci in db.INSs on s.AssetID equals ci.AssetID into AI
from subASSINC in AI.DefaultIfEmpty()
select new ASSPATINCVM()
{
AssetID = s.AssetID,
ProductName = s.ProductName,
ModelName = s.ModelName,
SupplierName = s.SupplierName,
ManufacturerName = s.ManufacturerName,
SerialNo = s.SerialNo,
PurchaseDate = s.PurchaseDate,
PoNo = s.PoNo,
Costing = s.Costing,
TeamName = s.TeamName,
StaffName = s.StaffName,
WarrantyEndDate = subASSPAT.WarrantyEndDate,
InspectionDate = subASSPAT.InspectionDate,
InspectionOutcomeResult = subASSPAT.InspectionOutcomeResult,
InspectionDocumnets = subASSPAT.InspectionDocumnets ?? String.Empty,
InspectionDueDate = subASSPAT.InspectionDueDate
});
return View(ASSPATINCVM);
}
Я получаю ошибку:
The model item passed into the dictionary is of type 'System.Data.Entity.Infrastructure.DbQuery`1[Assets.Areas.CCS.Models.ASSPATINCVM]', but this dictionary requires a model item of type 'Assets.Areas.CCS.Models.ASSPATINCVM'.
Итак, я попытался перечислить ()
InspectionDate = subASSPAT.InspectionDate,
InspectionOutcomeResult = subASSPAT.InspectionOutcomeResult,
InspectionDocumnets = subASSPAT.InspectionDocumnets ?? String.Empty,
InspectionDueDate = subASSPAT.InspectionDueDate
}).List();
@model List<Assets.Areas.CCS.Models.ASSPATINCVM>
Но теперь жалоба
List<ASSPATINCVM>' does not contain a definition for 'ModelName'
Обновление
ViewModel:
using Assets.Models;
using System;
using System.ComponentModel.DataAnnotations;
namespace Assets.Areas.CCS.Models
{
public class ASSPATINCVM
{
public int AssetID { get; set; }
public string SerialNo { get; set; }
public string PoNo { get; set; }
public float? Costing { get; set; }
public string InspectionDocumnets { get; set; }
public Product ProductName { get; set; }
public InspectionOutcome InspectionOutcomeResult { get; set; }
public Model ModelName { get; set; }
public BudgetCode Code { get; set; }
public AssetType AssetTypeName { get; set; }
public Manufacturer ManufacturerName { get; set; }
public Staff StaffName { get; set; }
public Team TeamName { get; set; }
public Supplier SupplierName { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yy}", ApplyFormatInEditMode = true)]
public DateTime? PurchaseDate { get; set; }
public DateTime? WarrantyEndDate { get; set; }
public DateTime? InspectionDate { get; set; }
public DateTime? InspectionDueDate { get; internal set; }
}
}
Часть страницы сведений:
@model Assets.Areas.CCS.Models.ASSPATINCVM
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>ClinicalAsset</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.ModelName)
</dt>
<dd>
@Html.DisplayFor(model => model.ModelName)
</dd>
<dt>
@Html.DisplayNameFor(model => model.AssetTypeName)
</dt>
<dd>