3

次の方法に興味があります。サポートケースに関する親データを含むメインビューがあります。また、部分ビューを使用してMTMデータの子リストを表示します。必要なデータを部分ビューに提供するためにViewModelを構築しました。

これが私のViewModelです:

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

ViewModelは、次の2つのドメインモデルのデータに基づいています。

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コントローラーで処理しますか?

4

1 に答える 1

6

はい、データを処理してクライアントに送信する場合は、彼自身のアクションが必要です。例えば

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>
于 2012-07-13T18:36:54.450 に答える