2012-03-09 2 views
1

나는 3 개 모델 트랙 또한 트랙의 인스턴스가 재생 목록의 인스턴스가 앨범 있습니다.MVC 3 - 컨트롤러에서보기에서 선택된 항목을 확인하는 방법은 무엇입니까?

현재 내 앨범보기에는 재생 목록과 재생 목록에 추가 버튼이있는 하단에 체크 박스와 드롭 다운이있는 각 트랙이 표시됩니다. 따라서 사용자는 앨범에서 트랙을 선택하고 이미 가지고있는 재생 목록에 추가 할 수 있어야합니다. 하지만 내 컨트롤러가 어떻게 처리되는지는 잘 모르겠습니다.

**Album View** 
@{ 
    ViewBag.Title = "Details"; 
} 

<h2>Album: @Model.Title</h2> 

@{ 

    List<Sem_App.Models.Playlist> abc = ViewBag.Playlists; 

    IEnumerable<SelectListItem> selectList = 
    from c in abc 
    select new SelectListItem 
    { 
     Text = c.PlaylistName, 
     Value = c.PlaylistName, 
    }; 
} 

@using (Html.BeginForm()){ 
    foreach (var track in Model.Tracks) 
    { 
     @Html.CheckBox(track.Title) 
     @track.Title 
     <br /> 
    } 

    @Html.DropDownList("abd", selectList) 

    <input type="submit" value="Add selected songs to playlist" /> 
} 

내 컨트롤러 방법 나는 사용자가 선택한 추적하는 확인하는 사용자가 컨트롤러에서 선택한 재생 목록 수있는 방법

[HttpPost] 
public ActionResult Details(FormCollection fc) 
{ 
    return View(); 
} 

모양처럼 내보기 보인다?

답변

1

앨범보기의 모델이 @model Album 인 것으로 가정합니다.

귀하의 모델은 다음과 같습니다

class Track 
{  
.... 
 .... 
bool IsSelected; 
} 

그리고보기 :

@using (Html.BeginForm()){ 
      for (int i = 0; i < Model.Tracks.Count(); i++) {  
       @Html.CheckBoxFor(m => m.Tracks[i].IsSelected) 
       @Model.Tracks[i].Name 
     } 
    } 

그래서 당신이 컨트롤러는 다음과 같이 수 :

[HttpPost] 
public ActionResult Details(Album album, FormCollection fc) 
{ 
    album.Tracks;//should contain your tracks 
    album.Tracks[0].IsSelected;//should return if it was selected 
    fc["abd"];//should return which element was selected. 
    return View(); 
} 

로보기는 다음과 같이 할 필요가 그래서 html이 올바르게 렌더링되고 값이 컨트롤러에 올바르게 바인딩됩니다.

강하게 입력 된 방법 (으로 끝남)을 사용하여 다른 값을 다시 컨트롤러에 바인딩해야합니다. 그리고 @Html.HiddenFor(m=>m.Id)을 사용하여 앨범의 숨김 필드를 만들면 어떤 앨범이 게시되었는지 알 수 있습니다.

+0

체크되지 않은 항목은 제출되지 않습니다. 따라서 체크 된 항목 만 실행됩니다. IsSelected 속성을 사용하는 대신 기본 키 값을 checkbox 값으로 설정해야합니다. 이렇게 @ html.CheckBoxFor (m => m.Tracks [i] .Id)' – Yorgo

+0

@ Html.CheckBoxFor (m => m.Tracks [i] .Id) - 이렇게하면 int가 bool로 변환 될 수 없다는 오류가 발생합니다. . – user972616

+0

IsSelected 속성을 사용하는 경우 트랙을 선택하고 나면 오른쪽 이후에 선택을 해제해야합니까? 이러한 트랙은 앨범에만 표시되는 것이 아니라 아티스트 페이지 아래에 표시됩니다. – user972616

관련 문제