2016-06-27 12 views
1

Я пытаюсь заполнить частичный вид, используя следующие на мой взгляд:Рендер частичный вид в MVC, используя результат действия, ObjectContext расположенный

@{Html.RenderAction("AppointmentsView", "Appointment", new { id = Model.PatientId });} 

Мой результат действия заключается в следующем:

public ActionResult AppointmentsView(int id) 
    { 
     using (var context = new WaysToWellnessDB()) 
     { 
      IEnumerable<AppointmentDiary> appointments = context.AppointmentDiaries.Where(a => a.PatientId == id).ToList(); 

      var accountUsers = context.AccountUsers.Select(rr => new SelectListItem { Value = rr.AccountUserId.ToString(), Text = rr.FirstName + " " + rr.LastName }).ToList(); 
      ViewBag.AccountUsers = accountUsers; 

      var location = context.Locations.Select(rr => new SelectListItem { Value = rr.LocationId.ToString(), Text = rr.LocationDesc }).ToList(); 
      ViewBag.Location = location; 

      return PartialView("/Views/Patient/Appointment/_ViewAppointments.cshtml", appointments); 
     } 
    } 

Мой частичный вид выглядит следующим образом:

@foreach (var item in Model) 
{ 
    <tr> 
     <td>@Html.DisplayFor(x => item.DateTimeScheduled)</td> 
     <td>@Html.DisplayFor(x => item.AppointmentLength)</td> 
     <td>@Html.DisplayFor(x => item.AccountUser.FirstName) @Html.DisplayFor(x => item.AccountUser.LastName)</td> 
     <td>@Html.DisplayFor(x => item.Location.LocationDesc)</td> 
     <td>@Html.DropDownListFor(x => item.AttendedStatusId, (IEnumerable<SelectListItem>)ViewBag.AppointmentStatus, null, htmlAttributes: new { @class = "form-control", @id = "appointmentStatusId", onchange = "alert(this.options[this.selectedIndex].value);" })</td> 
    </tr> 
} 

Это падает, говоря следующее:

Экземпляр объекта ObjectContext был удален и больше не может использоваться для операций, требующих подключения.

Я пробовал использовать .Inlcude в моем запросе linq, но это не сработало .. любые мысли о том, почему это не работает?

+1

Существует два навигационных свойства, Местоположение и AccountUser. Оба должны быть включены. –

+0

Include - это способ пойти с Location и AccountUser, что «не работает» об этом? –

+0

Его не позволяет включить в него хотя бы ... – user3284707

ответ

0

Ответ, высказанный Александром Дерксом, состоял в том, что мне нужно было включить System.Data.Entity в мои операторы using вверху, затем работало следующее.

public ActionResult AppointmentsView(int id) 
    { 
     using (var context = new WaysToWellnessDB()) 
     { 
      IEnumerable<AppointmentDiary> appointments = context.AppointmentDiaries.Include(p => p.AccountUser).Include(p => p.AttendedStatus).Include(p => p.Location).Where(a => a.PatientId == id).ToList(); 

      return PartialView("/Views/Patient/Appointment/_ViewAppointments.cshtml", appointments); 
     } 
    } 
0

Вы реализовали блок «using», который предоставляет объект после выполнения блока «using». Поэтому, когда вы пытаетесь получить доступ к виртуальным свойствам «item.AccountUser.FirstName», поскольку контекстный объект уже настроен, он бросает ошибку «Объект ObjectContext был удален». Как сообщил Alexander Derck, использование include решит эту проблему, потому что вы включите все необходимые виртуальные свойства заранее, когда объект контекста все еще жив. надеюсь, что это объяснит.

+0

обратитесь к этой [link] (https://msdn.microsoft.com/en-us/data/jj574232.aspx), чтобы понять, как инфраструктура сущности загружает связанные данные. –