Создание HTML-таблицы с использованием модели Asp.net MVC - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь создать динамическую таблицу, используя модель MVC. Это моя модель.

public class PrescriptionEditModel
{
    [Required]
    public Guid Id { get; set; }

    [Required]
    [Display(Name = "Medicine List")]
    public List<PrescriptionMedicineModel> PrescriptionList { get; set; }

}

открытый класс PrescriptionMedicineModel {

    [Required]
    public Guid Id { get; set; }


    [Required]
    [Display(Name = "Medicine")]
    public Guid MedicineId { get; set; }

    [Required] 
    [Display(Name = "Prescription Duration")]
    public Guid PrescriptionDurationId { get; set; }

    public string NumberOf { get; set; }
}

И код моего контроллера

public ActionResult Create()
    {
        ViewBag.PatientId = new SelectList(db.Patients.Where(h => h.HospitalId == hp.HospitalId), "Id", "FirstName");
        ViewBag.MedicineId = new SelectList(db.Medicines.Where(h => h.HospitalId == hp.HospitalId), "Id", "Name");
        ViewBag.PrescriptionFrequencyId = new SelectList(db.PrescriptionFrequencies.Where(h => h.HospitalId == hp.HospitalId), "Id", "Name");

        PrescriptionMedicineModel prescription = new PrescriptionMedicineModel()
        {
             MedicineId = Guid.Empty,
             PrescriptionDurationId = Guid.Empty,
             PrescriptionFrequencyId = Guid.Empty,
             PrescriptionWhentoTakeId = Guid.Empty
        };
        List<PrescriptionMedicineModel> newPrescriptionList = new List<PrescriptionMedicineModel>();
        newPrescriptionList.Add(prescription);

        PrescriptionEditModel newModel = new PrescriptionEditModel()
        {
            CaseHistory = null,
             DoctorName =null,
             HospitalId = hp.HospitalId,
              PatientId = Guid.Empty,
              PrescriptionDate = null,
              PrescriptionList = newPrescriptionList
        };
        return View(newModel);
    }

И мой взгляд

 <table class="table table-hover">
<thead>
   <tr>
      <th>Medicine Name</th>
      <th>Duration</th>
   </tr>
</thead>
<tbody>
   @for (var i = 0; i < Model.PrescriptionList.Count; i++)
   {
   <tr>
      <td>@Html.DropDownListFor(m => Model.PrescriptionList[i].MedicineId, new SelectList(ViewBag.MedicineId, "Id", "Name"))</td>
      <td>@Html.DropDownListFor(m => Model.PrescriptionList[i].PrescriptionDurationId, new SelectList(ViewBag.PrescriptionFrequencyId, "Id", "Name"))</td>
   </tr>
   }
</tbody>

Это приводит к ошибке «DataBinding:« System.Web.Mvc.SelectListItem »не содержит свойства с именем« Id ».]».

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

DropDownListFor не привязывает элементы к выпадающему.

Любые мысли

1 Ответ

0 голосов
/ 01 мая 2019

Вот пример, я полагаю, что ваши поля Id и Name не соответствуют модели, посмотрите, как моя модель имеет эти два свойства:

View:

@model XYZ.Models.Adviser

<div class="form-">
    <label asp-for="PracticeId" class="control-label">Practice</label>
    @Html.DropDownList("PracticeId", null, htmlAttributes: new { @class = "form-control" })
    @Html.ValidationMessageFor(m => m.PracticeId)
</div>

Контроллер:

private void PopulatePracticesDropDownList(object selectedPractice = null)
{
    var practicesQuery = from d in _context.Practice
                             .GroupBy(a => a.Name)
                             .Select(grp => grp.First())
                         orderby d.Name
                         select d;
    ViewBag.PracticeId = new SelectList(practicesQuery, "ID", "Name", selectedPractice);
}

Модель, имеет идентификатор и имя свойства:

public class Practice
{
    public int ID { get; set; }
    [Required]
    [Display(Name = "Practice Name")]
    public string Name { get; set; }  
}

public class Adviser
{
    public int ID { get; set; }
    [Required]
    [Display(Name = "Adviser Name")]
    public string Name { get; set; }
    [Required]
    public int PracticeId { get; set; }

    [System.ComponentModel.DataAnnotations.Schema.NotMapped]
    public string Practice { get; set; }
}
...