2012-05-06 3 views
0

그래서 MVC에서 일반적인 이벤트 유형 드롭 다운 목록을 얻으려고합니다.UIHint MVC 일반적인 드롭 다운리스트

나는 아래 부분 뷰를 만들었습니다

공유/EditorTemplates/

다음은 그 내용이다 : 이것은 내가위한 새로운 부분 뷰를 생성 할 필요가 있다는 사실을 제외하고, 좋은 작품

@model EventManager.Models.CreateEventModel 

@{ 

    EventManager.Models.DropdownEventTypesModel dropdownList = new EventManager.Models.DropdownEventTypesModel(); 

    List<SelectListItem> types = dropdownList.EventTypes; 

    Html.DropDownListFor(model => model.Type, types); 

} 

이 일반적인 드롭 다운을 사용하여 목표를 무너 뜨리는 모든 모델. C# MVC에서 모델에이 Type 속성이 있지만 말할 수있는 특정 모델을 지정하지 않는 방법이 있습니까?

나는 @model 동적 시도,하지만 비주얼 스튜디오에서이 오류를 반환

An expression tree may not contain a dynamic operation 

답변

2

당신이해야 할 모든 부분 편집기 템플릿이 편집기는 해당 부동산의 종류의 모델 유형을 만들 것입니다 포함 모델의 유형이 아닌 편집 할 것입니다.

이처럼 CreateEventModelEditEventModel, 그리고 모두 CreateEventModelEditEventModel가, EventType 특성을 가지고 당신이 EventType 클래스가 있다고 가정 :

public class CreateEventModel 
{ 
    //Other stuff here.... 
    public EventType TypeToCreate { get; set; } 
} 

public class EditEventModel 
{ 
    //Other stuff here.... 
    public EventType TypeToEdit { get; set; } 
} 

당신은 EditorTemplates의 부분이 EventType.cshtml라는 이름의 폴더를 생성 그리고 그것은 당신이 같은 넣어 :

@model EventManager.Models.EventType 

@{ 
    var types = //put whatever you need here to get the list of available types*; 
} 

@Html.DropDownListFor(m => m, types) 

공지 사항을 DropDownListFor() 호출에서 간단한 m => m 표현과 사실 여기에 포함 된 모델에 대한 참조는 없습니다. @model 선언의 유형은 단순히 EventType입니다. 모든 편집기 템플리트는 EventType 유형의 특성을 편집하는 데 사용된다는 점을 알아야합니다. 만들기보기를

:

당신은 당신의 CreateEventModel의보기에이 템플릿을 사용할 수있다

EditEventModel 다음과 같이

@model EventManager.Models.CreateEventModel 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 

@*Other stuff here...*@ 

@Html.EditorFor(m => m.TypeToCreate) 

편집보기 :

@model EventManager.Models.EditEventModel 

@{ 
    ViewBag.Title = "Edit"; 
} 

<h2>Edit</h2> 

@*Other stuff here...*@ 

@Html.EditorFor(m => m.TypeToEdit) 

(※ 코드 :

EventManager.Models.DropdownEventTypesModel dropdownList = new EventManager.Models.DropdownEventTypesModel(); 

List<SelectListItem> types = dropdownList.EventTypes; 

은 실제로 뷰에 속하지 않지만 또 다른 문제입니다.)

+0

이렇게하면 @ model을 EventType 데이터 형식과 함께 사용하는 것이 좋습니다. @model int를 사용하여 끝났습니까? 그래서 어떤 관점에서도 일반적으로 사용할 수 있습니다. –