2017-02-01 8 views
2

Это мой первый раз, когда я пишу приложение MVC 5 и используя C#. Я прошел довольно далеко, и мне удалось решить множество ошибок, с которыми я столкнулся, но я в тупике.MVC 5 Подробный вид, не отображающий данные для полей с внешними ключами

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

Index контроллера

public ActionResult Index(int? filterDwg) 
{ 
    var checkOut = db.CheckOut.Include(c => c.CheckOutStatus).Include(c => c.DwgList); 
    var checkedOut = checkOut.Where(s => s.CheckStatus == (1)); 

    //Filtering by Drawing 
    if (filterDwg != null) 
    { 
     checkedOut = checkedOut.Where(d => d.DrawingId == (filterDwg)); 
    } 

    return View(checkedOut.ToList()); 
} 

Теперь моя страница детали, мой контроллер выглядит следующим образом:

Детали Контроллер

public ActionResult Details(int? id) 
{ 
    if (id == null) 
    { 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
    } 
    CheckOut checkOut = db.CheckOut.Find(id); 

    if (checkOut == null) 
    { 
     return HttpNotFound(); 
    } 


    return View(checkOut); 
} 

Когда я подтягиваю людей Вид мычание:

подробности Просмотреть

@model NoDwgASP.Models.CheckOut 


@{ 
    ViewBag.Title = "Details"; 
} 

<h2>Details</h2> 

<div> 
    <h4>CheckOut</h4> 
    <hr /> 
    <dl class="dl-horizontal"> 
     <dt> 
      @Html.DisplayNameFor(model => model.CheckOutStatus.CheckStatusName) 
     </dt> 

     <dd> 
      @Html.DisplayFor(model => model.CheckOutStatus.CheckStatusName) 
     </dd> 

     <dt> 
      @Html.DisplayNameFor(model => model.DwgList.DwgNum) 
     </dt> 

     <dd> 

      @Html.DisplayFor(model => model.DwgList.DwgNum) 
     </dd> 

     <dt> 
      @Html.DisplayNameFor(model => model.UserInitials) 
     </dt> 

     <dd> 
      @Html.DisplayFor(model => model.UserInitials) 
     </dd> 

     <dt> 
      @Html.DisplayNameFor(model => model.Project) 
     </dt> 

     <dd> 
      @Html.DisplayFor(model => model.Project) 
     </dd> 

     <dt> 
      @Html.DisplayNameFor(model => model.CheckOutDate) 
     </dt> 

     <dd> 
      @Html.DisplayFor(model => model.CheckOutDate) 
     </dd> 

     <dt> 
      @Html.DisplayNameFor(model => model.ReturnDate) 
     </dt> 

     <dd> 
      @Html.DisplayFor(model => model.ReturnDate) 
     </dd> 

    </dl> 
</div> 
<p> 
    @Html.ActionLink("Edit", "Edit", new { id = Model.CheckId }) | 
    @Html.ActionLink("Back to List", "Index") 
</p> 

Поля для DwgNum и CheckStatusName являются пустыми. Эти поля являются целыми числами и являются внешними ключами, привязанными к другой базе данных, которая имеет строковые значения для этих свойств.

Я понимаю, что нужно что-то вроде так

var checkOut = db.CheckOut.Include(c => c.CheckOutStatus).Include(c => c.DwgList) 

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

CheckOut checkOut = db.CheckOut.Find(id); 

Кто-нибудь есть какие-либо предложения? Я в тупике, и я не мог найти никаких связанных проблем.

+1

Вы можете использовать 'db.CheckOut.Include (....) Где (х => x.ID == идентификатор) .FirstOrDefault();. '(предполагая, что 'ID' - ваше поле PK) –

+0

Спасибо! Это сработало ... Я возвращался назад, чтобы ответить на свой вопрос, потому что у меня возникла идея поиска «включить комбинирование и найти MVC 5» после того, как я опубликовал .... http://stackoverflow.com/questions/7348663/ c-sharp-entity-framework-how-can-i-comb-a-find-and-include-on-a-model-obje – mecasull

+0

Метод поиска не поддерживает Include. Это может быть потому, что Find сначала пытается искать объекты, загруженные в память, а затем пытается вернуться в базу данных, поэтому вам нужно использовать Where, как предложено Стивеном. – Vinod

ответ

0

как упоминалось выше ..

public ActionResult Details(int? id) 
{ 
    if (id == null) 
    { 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
    } 
    CheckOut checkOut = db.CheckOut 
     .Include(c => c.CheckOutStatus) 
     .Include(c => c.DwgList) 
     .SingleOrDefault(x => x.CheckId == id); 

    if (checkOut == null) 
    { 
     return HttpNotFound(); 
    } 

    return View(checkOut); 
}