2011-08-29 4 views
5

나는 내 데이터베이스를 생성하는 엔티티 프레임 워크 코드 먼저 사용하고, 그래서 객체는 다음과 같이 정의 한 다음 지금면도칼과 함께 ASP.NET MVC 3을 사용하면 ICollection을 Create 뷰에 추가하는 가장 효과적인 방법은 무엇입니까?

public class Band 
{ 
    public int Id { get; set; } 
    [Required(ErrorMessage = "You must enter a name of this band.")] 
    public string Name { get; set; } 
    // ... 
    public virtual ICollection<Genre> Genres { get; set; } 
} 

나는이에 대한 작성보기를 찾고 있어요 및 기본 발판이 아니다 과거의 경험에서 기대했던 것에 관한 장르를 제 형식에 추가합니다.

온라인으로 볼 때 Using ASP.NET MVC v2 EditorFor and DisplayFor with IEnumerable<T> Generic types은 내가 원하는 것에 가장 가깝지만, Razor 및 MVC 3 (ASP.NET MVC 3 Custom Display Template With UIHint - For Loop Required?)에서는 의미가없는 것처럼 보입니다.

내 생성보기에 그 목록을하여 ViewBag에 장르의 목록과 다음 루프를 추가 한 현재

: 아직 처리되지 아니한 경우의

@{ 
    List<Genre> genreList = ViewBag.Genres as List<Genre>; 
} 
// ... 
<ul> 
@for (int i = 0; i < genreList.Count; i++) 
{ 
    <li><input type="checkbox" name="Genres" id="[email protected](i.ToString())" value="@genreList[i].Name" /> @Html.Label("Genre" + i.ToString(), genreList[i].Name)</li> 
} 
</ul> 

외부 사용자가 자바 스크립트 비활성화 및 확인란을 가지고 재검사가 필요하고 실제로이 정보로 데이터베이스를 업데이트하면 원하는대로 장르를 출력합니다.

그러나 MVC 3의 성능이 얼마나 좋았는지에 따라 기분이 좋지 않습니다.

MVC 3에서 이것을 처리하는 가장 효과적인 방법은 무엇입니까?

답변

5

ViewBag을 통해 내 View로 목록을 보내지 않고 대신 내 viewmodel을 사용하여이 작업을 수행합니다.

내가 EditorTemplate과 같이 있습니다 :

@model IceCream.ViewModels.Toppings.ToppingsViewModel 
<div> 
    @Html.HiddenFor(x => x.Id) 
    @Html.TextBoxFor(x =x> x.Name, new { @readonly="readonly"}) 
    @Html.CheckBoxFor(x => x.IsChecked) 
</div> 

내 조회수 \ 아이스크림 \ EditorTemplates 폴더에 넣어 예를 들어,이 같은 일을했다. 사용자가 특정 토핑을 "확인"할 수 있도록 일부 html을 표시하기 위해이를 사용합니다. 이 같은

그럼 내보기에 내가있어 뭔가 :

@HtmlEditorFor(model => model.Toppings) 

하고 내 EditorTemplate에서 그 결과를 사용 내 뷰 모델의 토핑 속성에 토핑의 각각에 사용되는.

그리고 나는 무엇보다도 토핑 수집 포함하는 뷰 모델이있어 : 내 컨트롤러에 이상

public IEnumerable<ToppingsViewModel> Toppings { get; set; } 

는 특히, 그러나 나는 내가에서 그렇게 (토핑을 검색 내 경우) 내 viewmodel의 속성을 토핑 컬렉션에 설정합니다. Topping이 이전에 선택되었을 수있는 Edit의 경우 TopingsViewModel의 IsChecked 멤버를 설정하고 해당 확인란을 선택하도록 설정합니다.

이렇게하면 올바른 모델 바인딩이 제공되므로 사용자가 몇 가지 토핑을 선택하면 컬렉션의 기본 항목에 해당 선택 항목이 반영됩니다. 나에게 잘 돌아갔다. 도움이 되었으면 좋겠다.

+0

죄송합니다. 실제로 이것을 구현할 시간을 찾으려고합니다. 하지만 귀하의 질문에 대한 답변을 추가하는 문맥을 추가 http://stackoverflow.com/q/7155747/11912 지적 가치가있다. –