2013-02-17 2 views
0

내 도메인 객체 Store 개체 Chain에 대한 참조가 저장 컨트롤러 :C# 오브젝트 참조

public class Store 
{ 
    public Chain Chain { get; set; } 
} 

를 새 점포 만들기에 연결된 체인을 설정할 수있는 가능성이있다. 나는 ViewBag를 통해 체인 객체를 전달하여이를 실현 및 선택을위한 Html.DropDownListFor을 사용하고 있습니다 :

@Html.DropDownListFor(
    x => x.Chain, 
    new SelectList(ViewBag.Chains, "Id", "Name")) 

지금까지 너무 좋아하지만, 다시 컨트롤러 (제출 후) 체인 속성이 null입니다. DropDownList를 Chain.Id으로 설정할 수 있다고 생각했지만 엔티티를 다시로드해야합니다. 올바른 참조를 얻거나 유지하는 더 좋은 방법이 있습니까?

답변

2

정확한 참조를 얻고 유지하는 더 좋은 방법이 있습니까?

아니요, 이것이 HTML의 작동 방식입니다. 선택한 값만 서버에 전송되며이 값을 사용하여 해당 엔티티를로드해야합니다. ASP.NET MVC 개발에 들어가기 전에 HTML을 배우십시오. 그것은 당신을 아주 많이 도울 것입니다.

@Html.DropDownListFor(
    x => x.Chain.Id, 
    new SelectList(ViewBag.Chains, "Id", "Name") 
) 

음이 실제 사실로 완전히 정직이 처리 할 수있는 가장 정확한 방법은 모든 ViewBag 쓰레기 제거하고있는 실제 뷰 모델을 사용하여 얻을 수 있습니다 당신과 함께 : 그것은 올바른 방법 응용 프로그램은 :

@Html.DropDownListFor(
    x => x.ChainId, 
    Model.AvailableChains 
) 

물론 AvailableChains 뜻이보기에 당신이 준비 뷰 모델에 대한 유형 IEnumerable<SelectListItem>의 재산 곳. 항상 MVC를 으로하고 싶다면 항상 뷰 모델을 사용해야하며 도메인 모델을 뷰에 전달하면 안됩니다.

public class MyViewModel 
{ 
    public int ChainId { get; set; } 
    public IEnumerable<SelectListItem> AvailableChains { get; set; } 
} 
+0

감사합니다 : 여기

그리고는 뷰 모델처럼 보이게하는 방법입니다! 흠, 관련 요소의 ID 만 설정하고 다시로드하고 할당하는 클린 프로그래밍 스타일처럼 들리지는 않습니다 ... 도메인 객체! 나는 그것이 ViewModel을위한 시간이라고 생각한다. – core

+0

같은 생각을 가진 크로스 포스트 :-) 다시 한번 감사드립니다. – core