传递给字典的模型是一种类型,而字典需要类型为 ViewModels 的模型项

The Model Passed to Dictionary is of one type whereas the Dictionary Requires Model Item of Type ViewModels

我正在使用部分视图来获得一种功能,在该功能中,我必须从数据库中具有一对多关系的两个 table 中删除数据。为此,我在控制器中为两个 table 使用相同的“删除”功能。我使用 ViewModels 在删除视图中为这些 table 添加了两个模型,并在主删除页面中呈现了两个部分视图以在每个删除视图上显示相关数据但是在完成所有这些编码之后我收到以下错误.

传入字典的模型项是 'System.Data.Entity.DynamicProxies.tblPatientBill_804486DE0CB5E4B1C416CFC35E7B001C20B1FDB3674F40F1811012FFC9BAA908' 类型,但此字典需要 'HMS.ViewModels.DeleteViewModel'.

类型的模型项

这是我的代码详情:

患者账单控制器:

 public ActionResult Delete(int? id,DeleteViewModel model)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            PatientsBillViewModel billmodell = new PatientsBillViewModel();
            PatientsBillDetailViewModel billdetailmodell = new PatientsBillDetailViewModel();

            tblPatientBill bill = db.tblPatientBills.Find(id);
            tblPatientBillDetail billdetail = db.tblPatientBillDetails.Find(id);

            if (billdetail == null)
            {
                if (bill == null)
                {
                    return HttpNotFound();
                }
                else
                {

                    billmodell.ID = bill.ID;
                    billmodell.PatientAppointmentID = bill.PatientAppointmentID;
                    billmodell.BillNo = bill.BillNo;
                    billmodell.Amount = bill.Amount;
                    billmodell.Discount = bill.Discount;
                    billmodell.CreatedAt = bill.CreatedAt;
                    billmodell.CreatedBy = bill.CreatedBy;
                    billmodell.Description = bill.Description;
                    return View(billmodell);
                }
            }
            else
            {
                billdetailmodell.ID = billdetail.ID;
                billdetailmodell.PatientBillID = billdetail.PatientBillID;
                billdetailmodell.Amount = billdetail.Amount;
                billdetailmodell.CreatedAt = billdetail.CreatedAt;
                billdetailmodell.CreatedBy = billdetail.CreatedBy;
                billdetailmodell.Description = billdetail.Description;
                return View(billdetail);
            }

        }

Delete.cshtml:

@using HMS.ViewModels
@model HMS.ViewModels.DeleteViewModel

@{
    ViewBag.Title = "Delete";
    Layout = null;
}

@{Html.RenderPartial("PatientsBillDelete", Model); }
@{Html.RenderPartial("PatientsBillDetail", Model); }

ViewModel.cs:

public class DeleteViewModel
    {
        public  PatientsBillViewModel billmodel { set; get; }
        public PatientsBillDetailViewModel billdetailmodel { set; get; }

    }

  public class PatientsBillViewModel
    {
        public int ID { get; set; }
        public int PatientAppointmentID { get; set; }
        public string BillNo { get; set; }
        public float Amount { get; set; }
        public float Discount { get; set; }
        public string CreatedAt { get; set; }
        public string CreatedBy { get; set; }
        public string Description { get; set; }
    }

    public class PatientsBillDetailViewModel
    {
        public int ID { get; set; }
        public int PatientBillID { get; set; }
        public float Amount { get; set; }
        public string CreatedAt { get; set; }
        public string CreatedBy { get; set; }
        public string Description { get; set; }
    }

部分视图是:

病人账单Delete.cshtml

PatientBillDetail.cshtml

病人账单Delete.cshtml:

@using HMS.ViewModels
@model HMS.ViewModels.DeleteViewModel
@{
    ViewBag.Title = "PatientsBill Delete";
}

<section class="content">
    <div class="container-fluid">
        <div class="block-header">
            <h2>Delete</h2>
        </div>
        <div class="row clearfix">
            <div class="col-lg-12 col-md-12 col-sm-12">
                <div class="card">
                    <h3>Are You Sure You Want To Delete This?</h3>
                    <div class="body">
                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(m => m.billmodel.ID)
                                        <br />
                                        @Html.DisplayFor(m => m.billmodel.ID)
                                    </div>
                                </div>
                            </div>
                        </div>

                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(m => m.billmodel.PatientAppointmentID)
                                        <br />
                                        @Html.DisplayFor(m => m.billmodel.PatientAppointmentID)
                                    </div>
                                </div>
                            </div>
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">

                                        @Html.DisplayNameFor(m => m.billmodel.BillNo)
                                        <br />
                                        @Html.DisplayFor(m => m.billmodel.BillNo)
                                    </div>
                                </div>
                            </div>
                        </div>

                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(m => m.billmodel.Amount)
                                        <br />
                                        @Html.DisplayFor(m => m.billmodel.Amount)
                                    </div>
                                </div>
                            </div>
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(m => m.billmodel.Discount)
                                        <br />
                                        @Html.DisplayFor(m => m.billmodel.Discount)
                                    </div>
                                </div>
                            </div>
                        </div>

                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(m => m.billmodel.CreatedAt)
                                        <br />
                                        @Html.DisplayFor(m => m.billmodel.CreatedAt)
                                    </div>
                                </div>
                            </div>
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(m => m.billmodel.CreatedBy)
                                        <br />
                                        @Html.DisplayFor(m => m.billmodel.CreatedBy)
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(m => m.billmodel.Description)
                                        <br />
                                        @Html.DisplayFor(m => m.billmodel.Description)
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                @using (Html.BeginForm())
                                {
                                    @Html.AntiForgeryToken()

                                    <div class="form-actions no-color">
                                        @Html.HiddenFor(m => m.billmodel.ID)
                                        <input type="submit" value="Delete" class="btn btn-default" /> |
                                        @Html.ActionLink("Back to List", "EditBill")
                                    </div>
                                }
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</section>

PatientsBillDetail.cshtml

@using HMS.ViewModels
@model HMS.ViewModels.DeleteViewModel
@{
    ViewBag.Title = "PatientsBill Delete";
}

<section class="content">
    <div class="container-fluid">
        <div class="block-header">
            <h2>Delete</h2>
        </div>
        <div class="row clearfix">
            <div class="col-lg-12 col-md-12 col-sm-12">
                <div class="card">
                    <h3>Are You Sure You Want To Delete This?</h3>
                    <div class="body">
                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(model => model.billdetailmodel.ID)
                                        <br />
                                        @Html.DisplayFor(model => model.billdetailmodel.ID)
                                    </div>
                                </div>
                            </div>
                        </div>

                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(model => model.billdetailmodel.PatientBillID)
                                        <br />
                                        @Html.DisplayFor(model => model.billdetailmodel.PatientBillID)
                                    </div>
                                </div>
                            </div>
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(model => model.billdetailmodel.Amount)
                                        <br />
                                        @Html.DisplayFor(model => model.billdetailmodel.Amount)
                                    </div>
                                </div>
                            </div>
                        </div>

                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(model => model.billdetailmodel.CreatedAt)
                                        <br />
                                        @Html.DisplayFor(model => model.billdetailmodel.CreatedAt)
                                    </div>
                                </div>
                            </div>
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(model => model.billdetailmodel.CreatedBy)
                                        <br />
                                        @Html.DisplayFor(model => model.billdetailmodel.CreatedBy)
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                <div class="form-group">
                                    <div class="form-line">
                                        @Html.DisplayNameFor(model => model.billdetailmodel.Description)
                                        <br />
                                        @Html.DisplayFor(model => model.billdetailmodel.Description)
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="row clearfix">
                            <div class="col-sm-6 col-md-6 col-lg-6">
                                @using (Html.BeginForm())
                                {
                                    @Html.AntiForgeryToken()

                                    <div class="form-actions no-color">
                                        @Html.HiddenFor(model => model.billdetailmodel.ID)
                                        <input type="submit" value="Delete" class="btn btn-default" /> |
                                        @Html.ActionLink("Back to List", "EditBill")
                                    </div>
                                }
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</section>

我认为我的控制器逻辑有问题,我如何查找在 Delete 函数中传递的不同 ID 并检查两个不同的 table 并将结果传递给 viewmodel? 请告诉我我做错了什么。提前致谢

您实际上是将错误的对象返回给您的视图。您应该将 DeleteViewModel 对象传递回您的视图,例如:

DeleteViewModel deleteViewModel = new DeleteViewModel ();
deleteViewModel.billmodell = billmodell;
deleteViewModel.billdetailmodel = billdetailmodell;

然后在您的 View() 方法调用中传递它:

return View(deleteViewModel);

从数据库加载记录后的代码应如下所示:

DeleteViewModel deleteViewModel = new DeleteViewModel();
deleteViewModel.billmodell = new PatientsBillViewModel(); ;
deleteViewModel.billdetailmodel = new PatientsBillDetailViewModel();


tblPatientBill bill = db.tblPatientBills.Find(id);
tblPatientBillDetail billdetail = db.tblPatientBillDetails.Find(id);


if (bill != null)
{
    deleteViewModel.billmodell.ID = bill.ID;
    deleteViewModel.billmodell.PatientAppointmentID = bill.PatientAppointmentID;
    deleteViewModel.billmodell.BillNo = bill.BillNo;
    deleteViewModel.billmodell.Amount = bill.Amount;
    deleteViewModel.billmodell.Discount = bill.Discount;
    deleteViewModel.billmodell.CreatedAt = bill.CreatedAt;
    deleteViewModel.billmodell.CreatedBy = bill.CreatedBy;
    deleteViewModel.billmodell.Description = bill.Description;
}
if(billdetail != null)
{
    deleteViewModel.billdetailmodel.ID = billdetail.ID;
    deleteViewModel.billdetailmodel.PatientBillID = billdetail.PatientBillID;
    deleteViewModel.billdetailmodel.Amount = billdetail.Amount;
    deleteViewModel.billdetailmodel.CreatedAt = billdetail.CreatedAt;
    deleteViewModel.billdetailmodel.CreatedBy = billdetail.CreatedBy;
    deleteViewModel.billdetailmodel.Description = billdetail.Description;

}

return View(deleteViewModel);