2013-12-07 2 views
1

ASP.NET MVC 4 응용 프로그램에서 작업 중입니다. 나는 EF 5Code First을 사용합니다. N 관계 :면도기에서 요청간에 ICollection 엔티티 속성을 유지하는 방법

public class Menu 
{ 
    //some properties 
    public virtual ICollection<Document> Documents { get; set; } 
} 

과 : 나는 1 개의 엔티티가

public class Document 
{ 
//some properties.. 
public int MenuID { get; set; } 
public virtual Menu Menu { get; set; } 
} 

내가 [HttpPost][HttpGet] 방법과 Edit 볼 수 있습니다. 나는이 같은 GET 작용을 통해 모델을 전달하는 경우 :

@Html.HiddenFor(m => m.Documents) 

다음 :

   Menu model = unitOfWork.MenuRepository.GetById(Id); 
       if (model != null) 
       { 
        return View(model); 
       } 

모든 권리를, 그 모델은 1 Documents을 포함하지만 내 면도기보기에 단순히 시도하는 경우에 볼 수 있습니다 Post 액션에 양식을 제출하면 Documents 속성이 null이라는 것을 알 수 있습니다.

Documents을 (를) 어떻게 유지할 수 있습니까?

답변

2

컬렉션과 관련된 모든 항목은 예상대로 렌더링되지 않습니다. 당신은 컬렉션을 기대하는 displaytemplate을 생성하고 HiddenFor에서 문서의 속성을 렌더링해야합니다. 또는 디스플레이 템플릿을 원한다면 문제의 뷰에서도 동일하게 수행해야합니다.

예를 들어

, 이것은 당신이해야 할 것입니다 : 당신이 다시 게시 할 때

@for(int counter = 0; counter < Model.Documents; counter++) 
{ 
    @Html.HiddenFor(m => Model.Documents[counter].Id) 
    @Html.HiddenFor(m => Model.Documents[counter].Title) 
    // and so on 
} 

을 그래서 지금, 그것은 결합하여 컨트롤러 메소드에 전달하고 봉사하는이 엔진에 필요한 모든 속성이 있습니다 그것.

+0

글쎄, 나는 이것을 위해서 노력했다. 첫째로, ICollection에 대한 인덱서를 사용할 수없는 것처럼 보입니다. 엔티티의 타입을 다른 것으로 바꾸더라도 여전히 아주 우아한 해결책은 아닙니다. – Leron

+0

안녕하세요 @ Leron - 죄송합니다. ICollection을 사용해 본 적이 없지만 내 뇌의 일부가 "그렇습니다. 제목에서 그렇게 말했습니다."라고 생각했습니다. 해결책은 우아하지 않을 수도 있지만 이것이 그 방법입니다. 나는 당신과 같은 우주선에 있었고, 이것은 효과가있었습니다. 이 코드를 Display 또는 Editor 템플릿에 포함 시켜서 대신 참조하고 템플릿이 대신 작업을하도록 할 수 있습니다. 당신은 ToList() 대신 인덱서 기능을 추가하기 위해 –

+0

을 추가 할 수 있습니다. 그렇지 않으면 인덱서가 필요합니다. 그렇지 않으면 MVC 엔진이 올바르게 다시 바인드 할 수 없습니다. 사실 그것은하지 않을 것입니다. 이것이 엔진 작동 방식입니다. 나는 전에 여러 가지 방법을 시도했고 이것이 유일한 방법이었다 - 나는 또한 똑같은 것을 확인한 블로그 게시물을 읽었다. –

1

생성 된 html을 살펴 보셨습니까? 보십시오)

This 대답 및 this one 해결 방법을 제공합니다.

관련 문제