2012-05-19 5 views
1

내가 테이블을 가지고 있다고 해봅시다 ... Person, 나는 추측합니다. Name, Email, AgeGroupId 컬럼을 가지고 있습니다.테이블에서 드롭 다운 값을 가져 오는 적절한 방법은 무엇입니까?

AgeGroupId는 AgeGroup 테이블과 관련된 int입니다. 연령대에는 ID와 AgeGroupName의 두 열만 있습니다.

이제는 '사람'을 편집하는 페이지 인 내보기에서 모든 AgeGroupName이 텍스트이고 값이 Id 인 드롭 다운 상자가 필요합니다. 이렇게하면 나중에 나이 그룹 테이블에 새 '연령 그룹'을 추가 할 수 있으며 모든 드롭 다운 상자가 업데이트됩니다. 아니면이 일을해야하는 더 좋은 방법이 있습니까?

나는 현재 내 모델에 전달하고하고있어

이 :

@ Html.DropDownListFor (모델 => model.AgeGroupId, @agegroups)

및 뷰의 상단에

, 내가 ' 하드 코딩 된 값으로 SelectList를 만든다. 내가 하드 코딩하지 않았 으면 좋겠다고 생각하지 않습니까? AgeGroups 테이블에서 목록을 가져 오기 위해 @agegroup 대신 무엇을해야합니까?

감사합니다.

+0

을 내 자습서 [1] : http://www.asp.net/mvc/tutorials/javascript/working- 드롭 다운 목록 상자 및 jquery/using the the dropdownlist-helper-aspnet-mvc [2] : http://blogs.msdn.com/b/rickandy/archive/2012/01/ 09/cascasding-dropdownlist-in-asp-net-mvc.aspx – RickAndMSFT

+0

@Kamyar, 내가 아직 드롭 다운을 채우지 만, 데이터베이스를 업데이트 할 때 예외가 생기기 때문에 나는 아직 대답하지 않았다. 전에 얻지 마라). 나는 지금 내가 가장 많이 배울 수 있도록 자신을 디버깅하려고 노력하고 있지만, 알아낼 수 없다면 다시 게시 할 것입니다. 그러나, 나는 당신을 upvote 않았다. – Kyle

답변

1

올바른 방법은 ViewModels를 사용하는 것입니다. 기본적으로 뷰에 대한 뷰 모델을 만들어야하며 db 결과를 뷰에 직접 전달하지 않아야합니다. 단순히

public ActionResult Add(PersonViewModel vm) 
{ 
    var ctx = new Context(); 
    if(ModelState.IsValid) 
    { 
     ctx.Persons.Add(vm.Person); 
     return View("Index"); 
    } 

    return View(vm); 
} 

그리고보기에 :

public class PersonViewModel 
{ 
    public Person Person {get ; set;} 
    public Dictionary<int, string> AgeGroups { get; set; } 
    public PersonViewModel() {} 
    public PersonViewModel(int personId) 
    { 
     var ctx = new Context(); 
     this.Person = ctx.Persons.SingleOrDefault(p => p.Id == personId); 
     foreach(var ageGroup in ctx.AgeGroups) 
     { 
      this.AgeGroups.Add(ageGroup.Id, ageGroup.AgeGroupName); 
     } 
    } 

그런 다음 컨트롤러 방법은 다음과 같이 표시됩니다 뭔가처럼 물론

@Html.DropDownListFor(model => model.Person.AgeGroupId, 
new SelectList(model.AgeGroups, "Id", "AgeGroupName")) 

, 뷰의 모델은 지금 PersonViewModel입니다.
업데이트
ASP.NET MVC 3 도구 업데이트는 기본적으로 관계에 대한 드롭 다운을 추가합니다. 더 많은 정보 here.

관련 문제