2012-07-13 127 views
2

我很好奇如何執行以下操作。我有關於支持案例的父數據的主視圖。我還將使用局部視圖顯示MTM數據的子列表。我已經構建了一個ViewModel來爲部分視圖提供所需的數據。在視圖中使用ViewModel作爲局部視圖

這裏是我的ViewModel:

public class CaseComplaintsViewModel 
    { 
    public string ComplaintCode { get; set; } 
    public string ComplaintType { get; set; } 
    } 

視圖模型是基於這兩個域模型數據:

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> 

這個局部視圖將在我的主Cases視圖中使用。我還將定期使用ajax刷新這個局部視圖。

所以我的問題是,當我的主要案例視圖打開時,如何將正確的數據導入到視圖中?部分視圖是否需要它自己的控制器,還是我可以在Cases控制器中處理它?

回答

5

是的,它需要他自己的操作是你處理數據發送給客戶端。例如

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); 
} 

注意到我假設你從你所創建的視圖模型,其中一個基類。

要渲染的部分從主視圖,你剛纔打電話的主視圖這樣假設你主視圖它是強類型的

@model CaseComplaint 

<div id="complaintlist"> 
    @Html.Action("ShowCaseComplaints","yourController", new { someID = model.CaseID} 
</div> 
+0

感謝您的時間。我在問題中添加了一些新信息,以顯示ViewModel需要從中獲取數據的兩個域模型。所以基本上我需要根據CaseID查詢視圖模型的數據。那麼,是否會改變您提供的通過與ComplaintCode的連接從CaseComplaints進行查詢的操作? – Ryan 2012-07-13 18:46:29

+0

@Ryan檢查我的答案更新,我假設你正在使用實體框架 – Jorge 2012-07-13 19:05:56

+0

這似乎是偉大的。謝謝。現在我很好奇,因爲我使用ViewModel進行局部視圖顯然不是主視圖模型的一部分,那麼我該如何放置局部視圖併爲其指定模型?例如,我有這樣的主視圖的部分視圖:

@Html.Partial("_CaseComplaintCodes")
我不知道要在部分html幫手的模型參數中放什麼 – Ryan 2012-07-13 19:26:34