我很好奇如何做到以下几点。我有一个关于支持案例的父数据的主视图。我还将使用局部视图显示MTM数据的子列表。我已经构建了一个ViewModel来为部分视图提供所需的数据。
这是我的ViewModel:
public class CaseComplaintsViewModel
{
public string ComplaintCode { get; set; }
public string ComplaintType { get; set; }
}
ViewModel基于这两个域模型的数据:
public class CaseComplaint
{
[Key]
public int CaseComplaintID { get; set; }
public int CasesID { get; set; }
public int ComplaintCodeID { get; set; }
public virtual Cases Cases { get; set; }
public virtual ComplaintCode ComplaintCode { get; set; }
}
public class ComplaintCode
{
public int ComplaintCodeID { get; set; }
[MaxLength(50)]
[Required(ErrorMessage="Complaint Code is required")]
public string ComplaintCodeName { get; set; }
[MaxLength(50)]
[Required(ErrorMessage="Complaint Type is required")]
public string ComplaintType { get; set; }
public virtual ICollection<CaseComplaint> CaseComplaint { get; set; }
}
非常简单。
这是局部视图。
@model IEnumerable<cummins_db.ViewModels.CaseComplaintsViewModel>
<table width="100%">
<tr>
<th>Complaint Code</th>
<th>Complaint Description</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ComplaintCode )
</td>
<td>
@Html.DisplayFor(modelItem => item.ComplaintType)
</td>
</tr>
}
</table>
此部分视图将在我的主要案例视图中使用。我还将使用ajax定期刷新此局部视图。
所以我的问题是,当主要案例视图打开时,如何将正确的数据输入到视图中?部分视图是否需要它自己的控制器,还是我在Cases控制器中处理它?</ p>
答案 0 :(得分:5)
是的,它需要他自己的Action你处理数据发送给客户端。例如
public ActionResult ShowCaseComplaints(int someID)
{
//creates a linq or database sql could something like
/*var data = db.Complains.Find(someID).Select( x => new CaseComplaintsViewModel(){
ComplaintCode = x.ComplaintCode,
ComplaintType = x.ComplaintType
}).ToList();*/
var data = (from C in db.CaseComplaint
where C.CaseID == someID
select C.ComplaintCode).ToList().Select( x => new CaseComplaintsViewModel(){
ComplaintCode = x.ComplaintCode,
ComplaintType = x.ComplaintType
}).ToList();
return PartialView("Your_Partial_View_Name", data);
}
请注意,我假设您有一个基类来创建ViewModel。
要从主视图渲染部分,您只需在主视图中调用,假设您主要查看它的强类型
@model CaseComplaint
<div id="complaintlist">
@Html.Action("ShowCaseComplaints","yourController", new { someID = model.CaseID}
</div>