将ViewModel用于视图中的局部视图

时间:2012-07-13 18:28:18

标签: asp.net-mvc-3 razor

我很好奇如何做到以下几点。我有一个关于支持案例的父数据的主视图。我还将使用局部视图显示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>

1 个答案:

答案 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>