2010-02-11 7 views
0

에서 확인란 목록 작업 : 페이지, 태그소목 내 엔티티는 다음과 같이내 데이터베이스에있는 세 개의 테이블이 ASP.Net MVC보기

이 (약칭) ...

public class Page 
{   
    public int PageId { get; private set; } 
    public string Title { get; set; } 
    public string Body { get; set; } 
    public List<Tag> Tags { get; set; } 
} 

public class Tag 
{   
    public int TagId { get; private set; } 
    public string Name{ get; set; } 
} 

각 페이지

태그의 수를 가질 수 있으며 각 태그는 페이지의 수, 다 대다 관계에 따라서 소목 테이블에 적용 할 수 있습니다.

페이지 컨트롤러의 편집보기에서 사용자가 제목과 본문을 업데이트 할 수 있고 체크 박스 목록의 태그 표의 태그를 목록으로 선택할 수 있기를 바랍니다.

예를 들어, 태그 테이블에 10 개의 태그가 있고 현재 페이지에 Page.Tags에 두 개의 태그가있는 경우 두 개의 체크 박스가 표시되고 10 개의 체크 박스가 표시됩니다. 그런 다음 사용자가 선택을 변경하고 페이지를 저장하면 결합 자 테이블이 업데이트됩니다.

가장 좋은 방법은 무엇입니까? 데이터베이스 업데이트 코드에 만족합니다. 확실하지 않은 View 코드입니다.

답변

2

당신은 그런 걸 시도 할 수 있습니다 :

먼저이 같은 뷰 모델 정의 : 컨트롤러에, 그리고

public class PageViewModel 
{ 
    public Page pageToEdit{get;set;} 
    public IEnumerable<Tag> Tags {get;set;} 
} 

보기에
public ActionResult Edit(int id) 
{ 
    PageViewModel model = new PageViewModel(); 
    model.Tags = yourRepository.SelectTags(); 
    model.PageToEdit = yourRepository.SelectPage(id); 
    return this.View(model); 
} 

ViewPage<PageViewModel> 와 상속 콘텐츠는 다음과 같이 looke해야합니다.

<% using(Html.BeginForm()){ %> 

[...] 
<% 
foreach(Tag tag in Model.Tags) 
{ 
     Response.Write(Html.CheckBox("tagId_"+tag.TagId,Model.PageToEdit.Tags.Select(t=>t.TagId).Contains(tag.Tagid)); 
} 
%> 
[...] 
<% } %> 
+0

감사합니다. 새로운 수업을 만드는 것을 생각하지 않았습니다. 좋은 생각입니다. 이것은 일반적인 기술입니까? – philwilks

+0

예 일반적입니다. http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx – Gregoire

+0

제품이 필요한 경우 어떻게해야합니까? 많은 카테고리 (many-to-many)와 관련이 있습니다.이 경우에는 ID를 얻고 true/false가 아닌 필요가 있습니다. 어떻게 할 수 있습니까? – Sasha

관련 문제