Модель, переданная в словарь, относится к одному типу, тогда как для словаря требуется элемент модели типа ViewModels.

Я работаю с частичными представлениями, чтобы достичь функциональности, в которой мне нужно удалить данные из двух таблиц, имеющих отношение один ко многим в базе данных. Для этого я использую одну и ту же функцию «Удалить» в контроллере для обеих таблиц. Я добавил две модели для этих таблиц в представление удаления с помощью ViewModels и отрендерил оба частичных представления на главной странице удаления, чтобы отобразить соответствующие данные в каждом представлении удаления, но после выполнения всего этого кодирования я получаю следующую ошибку.

Элемент модели, переданный в словарь, имеет тип System.Data.Entity.DynamicProxies.tblPatientBill_804486DE0CB5E4B1C416CFC35E7B001C20B1FDB3674F40F1811012FFC9BAA908, но для этого словаря требуется элемент модели типа HMS.leteModel.

Вот мои детали кода:

Пациенты

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

PartialViews:

PatientBillDelete.cshtml

PatientBillDetail.cshtml

PatientBillDelete.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>

Я думаю, что есть проблема с моей логикой контроллера, как я могу искать разные идентификаторы, переданные в функции удаления, и проверять две разные таблицы и передавать результат в модель просмотра? Подскажите пожалуйста, что я делаю в этом не так. заранее спасибо


person Sadia    schedule 22.08.2019    source источник
comment
у вас здесь опечатка: return View(billdetail);   -  person Ehsan Sajjad    schedule 22.08.2019


Ответы (1)


Фактически вы возвращаете неправильный объект в свой просмотр. Вы должны передать объект 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);
person Ehsan Sajjad    schedule 22.08.2019