0

私はこのビューモデルを使用しています:

public class CaseComplaintsViewModel
{
    public int CasesID { get; set; }
    public int CaseComplaintID { get; set; }
    public string ComplaintCode { get; set; }
    public string ComplaintType { get; set; }
}

これは、ビュー モデルを使用するビューです。

@model IEnumerable<cummins_db.ViewModels.CaseComplaintsViewModel>

<table width="100%">
    <tr>
        <th></th>
        <th></th>
        <th>Complaint Code</th>
        <th>Complaint Description</th>
        <th>Delete</th>
    </tr>  
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.HiddenFor(modelItem => item.CasesID )    
            </td>
            <td>
                @Html.HiddenFor(modelItem => item.CaseComplaintID )    
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ComplaintCode )    
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ComplaintType)
            </td>
            <td>
                @Ajax.ActionLink("Delete", "RemoveCodeFromCase", "Cases", new {    caseid           item.CasesID, id = item.CaseComplaintID }, null)
            </td>        
        </tr>
    }
</table>

これは、この部分ビューをメイン ビューに返すコントローラー アクションです。

public ActionResult SelectForCase(int caseid, int compid)
{
    if (ModelState.IsValid)
    {
        CaseComplaint c = new CaseComplaint
        {
            CasesID = caseid,
            ComplaintCodeID = compid
        };
        db.CaseComplaints.Add(c);
        db.SaveChanges();

        var data = (from C in db.CaseComplaints
                    where C.CasesID == caseid
                    select C).ToList().Select( x => new CaseComplaintsViewModel()
                    {
                        CasesID = x.CasesID,
                        CaseComplaintID = x.ComplaintCodeID,
                        ComplaintCode = x.ComplaintCode.ComplaintCodeName,
                        ComplaintType = x.ComplaintCode.ComplaintType
                    }).ToList();

        return PartialView("_CaseComplaintCodes", data);
    }

    return PartialView("_CaseComplaintCodes");
}

db.SaveChangesViewModel を読み込もうとすると、その行で null 例外が発生しますComplaintCode = x.ComplaintCode.ComplaintCodeName

このビュー モデルは、CaseComplaintsおよび ComplaintCode モデルのビューを返すことを目的としています。

コード内のブレークポイントは、ComplaintCodeがロードされていないことを示しています。私は何かが欠けていることを知っていますが、何がわかりません。

ありがとう

** * ***編集* ** * ** * * これは私のケース モデルです

public class Cases
    {
    //case data model for call center
    //implement lists for all related child tables too

    [Key]
    public int CasesID { get; set; }

    public string CaseNumber { get; set; }

    [Required(ErrorMessage = "Customer is Required")]
    public int CustomerID { get; set; }
    public virtual Customer Customer { get; set; }

    [MaxLength(50)]
    public string UserName { get; set; }  //get user name from the aspnet membership

    [Required(ErrorMessage = "Case Category is Required")]
    public int CaseCategoryID { get; set; }

    public int TechnicianID { get; set; }
    public virtual Technician Technicians { get; set; }

    [Required(ErrorMessage = "Engine Model is Required")]
    public int EngineModelID { get; set; }
    public virtual EngineModel EngineModel { get; set; }

    [MaxLength(50)]
    public string BMSWorkorder { get; set; }

    [MaxLength(50)]
    [Required(ErrorMessage = "Status is Required")]
    public string CaseStatus { get; set; }

    [MaxLength(50)]
    public string OpenedBy { get; set; }

    [Required(ErrorMessage = "Opened Date is Required")]
    [DataType(DataType.DateTime)]
    public DateTime? OpenedDate { get; set; }

    [MaxLength(50)]
    public string ClosedBy { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime? ClosedDate { get; set; }

    [MaxLength(50)]
    [Required(ErrorMessage="Caller First Name is Required")]
    public string CallerFirstName { get; set; }

    [MaxLength(50)]
    [Required(ErrorMessage = "Caller Last Name is Required")]
    public string CallerLastName { get; set; }

    [MaxLength(100)]
    public string AdditionalContact { get; set; }

    [MaxLength(10)]
    [Required(ErrorMessage = "Qualified is Required")]
    public string Qualified { get; set; }

    public string Description { get; set; }

    [MaxLength(50)]
    [Required(ErrorMessage = "ESN is Required")]
    public string ESN { get; set; }

    [MaxLength(50)]
    [Required(ErrorMessage = "Mileage is Required")]
    public string Mileage { get; set; }

    [DataType(DataType.Date)]
    public DateTime? DateInService { get; set; }

    [MaxLength(50)]
    public string ESTR { get; set; }

    [MaxLength(50)]
    public string EDS { get; set; }

    [MaxLength(50)]
    public string GensetSerialNumber { get; set; }

    [MaxLength(50)]
    public string GensetModelNumber { get; set; }

    //child Case Notes records
    public virtual ICollection<CaseNotes> CaseNotes { get; set; }

    //child case attachment records
    public virtual ICollection<Attachment> Attachments { get; set; }

    //child case complaint records
    public virtual ICollection<CaseComplaint> CaseComplaint { get; set; }

    //tracking fields
    public DateTime? CreatedOn { get; set; }
    [MaxLength(50)]
    public string CreatedBy { get; set; }
    public DateTime? ModifiedOn { get; set; }
    [MaxLength(50)]
    public string ModifiedBy { 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; }

        }
4

2 に答える 2

1

これは、データ コンテキストからのデータに問題があります。Visual Studio のブレークポイントを使用しdb.CaseComplaints.ToList()て、各項目に null ではない有効な ComplaintCode プロパティがあることを確認します。

于 2012-10-19T16:48:10.283 に答える
1

挿入されたエンティティは後の選択で使用され、そのナビゲーション プロパティを読み込むことができません。これは、データベースからロードされたエンティティでのみ機能します。オブジェクトコンテキストを破棄して新しいコンテキストを作成すると、それは機能します。または、代わりにこの選択を試すことができます。

var data = (from C in db.CaseComplaints
            where C.CasesID == caseid
            select new CaseComplaintsViewModel()
                    {
                        CasesID = C.CasesID,
                        CaseComplaintID = C.ComplaintCodeID,
                        ComplaintCode = C.ComplaintCode.ComplaintCodeName,
                        ComplaintType = C.ComplaintCode.ComplaintType
                    }).ToList();

データベースからエンティティを更新するオプションもいくつかありますが、それが機能するかどうかはわかりませんが、不要な db クエリがもう 1 つあります。これは何もしません。

于 2012-10-19T17:00:35.893 に答える