2014-04-08 4 views
0

클래스에 일대 다 관계가 있고 뷰에 가상 객체를 표시하려고합니다. 나는 MVC와 EF에 상당히 익숙하다.MVC4 Entity Framework - 일대 다 관계를 표시하는 방법

"요청/작성"작업보기에서 PODObject에 대한 드롭 다운 목록을 표시하려고합니다. 여기

여기
public class PODObject 
    { 
     public int PODObjectID { set; get; } 
     public string name { set; get; } 
     public string CustomAttribute1 { set; get; } 
     public string CustomAttribute2 { set; get; } 
     public string CustomAttribute3 { set; get; } 
     public string CustomAttribute4 { set; get; } 
     public string CustomAttribute5 { set; get; } 
     public virtual ICollection<BookingObject> BookingObjectspublic { set; get; }  
    } 

public class RequestsQueueObject 
{ 
    // Request Attributes 
    public int RequestsQueueObjectID { set; get; } 
    public string CustomAttribute1 { set; get; } 
    public string CustomAttribute2 { set; get; } 
    public string CustomAttribute3 { set; get; } 
    public string CustomAttribute4 { set; get; } 
    public string CustomAttribute5 { set; get; } 

    public int PODObjectID { set; get; } 

    public virtual PODObject PODObject { set; get; } 
} 

컨트롤러 액션 여기에

public ActionResult Create([Bind(Include="RequestsQueueObjectID,POCPODAccess,CustomAttribute1,CustomAttribute2,CustomAttribute3,CustomAttribute4,CustomAttribute5")] RequestsQueueObject requestsqueueobject) 
    { 
     if (ModelState.IsValid) 
     { 
      db.RequestsQueueObjects.Add(requestsqueueobject); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(requestsqueueobject); 
    } 

생성됩니다

<div class="form-group"> 
      @Html.DropDownListFor(model => model.PODObject, new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.PODObject) 
       @Html.ValidationMessageFor(model => model.PODObject) 
      </div> 
     </div> 
+0

게시물을 게시하십시오. –

답변

0

어쩌면 내가 잘못 오전 cshtml 모델입니다하지만 당신 PODOObject은 보이지 않는다 List, Array 또는 무엇이든간에, 당신은 정말 당신의 드롭 다운을위한 소스로 그것을 사용할 수 없습니다 ...

+0

requestqueueobject는 하나의 PODObject 만 가져야하므로 목록으로 만들지 않았습니다. 그러나보기에서 하나를 선택할 수 있도록 사용자에게 PODObject 목록을 제시하고자합니다. – ZOO

0

당신이 찾고있는 것은 기존 PODObject 인스턴스 목록에서 선택하여 RequestQueueObject의 관련 항목으로 설정할 수 있다는 것입니다. 이를 해결하기 위해 몇 가지 문제가 있습니다.

  1. 당신은 PODObject과의 관계에 대한 ID를 개최 RequestQueueObject의 속성을 가지고 있지만이 현재 사용되지 않습니다. Entity Framework의 규칙은 명명 패턴이 [RelatedProperty][RelatedClassIdProperty] 인 속성을 찾는 것입니다. 시나리오에서는 PODObjectPODObjectID 또는 PODObject_PODObjectID이됩니다. 당신은 당신의 PODObjectID 속성에 ForeignKey 속성을 추가하여 해당을 취소 할 수 있습니다

    [ForeignKey("PODObject")] 
    public int PODObjectID { get; set; } 
    
  2. Html.DropDownListFor는 현재하지 않는이 두 번째 매개 변수에 대한 IEnumerable<SelectListItem>이 필요합니다. MVC는 당신을 위해 이것을하지 않을 것입니다; 직접 선택 목록을 만들어야합니다. 이상적으로, 당신은 속성으로이와 뷰 모델을 사용하지만, 당분간, 당신은 ViewBag 사용할 수 있습니다보기에서 액션

    var podObjectChoices = db.PODObjects.Select(m => new SelectListItem 
        { 
         Value = m.PODObjectID, 
         Text = m.name 
        }); 
    ViewBag.PODObjectChoices = podObjectChoices.ToList(); 
    return View(); 
    

    에서

    @Html.DropDownListFor(m => m.PODObjectID, (IEnumerable<SelectListItem>)ViewBag.PODOBjectChoices, new { @class = "control-label col-md-2" }) 
    
  3. 위의 샘플 코드에서이를 거의 다뤘지만 직접 드롭 다운 목록을 통해 PODOBject을 설정할 수는 없습니다. 대신 관계의 외래 키 속성 인 PODOBjectID을 설정하면 Entity Framework에서 관계를 연결합니다.