2011-05-02 3 views
18

목록 상자의 항목을 미리 선택하는 데 문제가 있습니다. mvc 3과 함께 면도기 뷰 엔진을 사용하고 있습니다. 동일한 문제가있는 게시물이 몇 개 있지만 나에게 도움이되지 않습니다. 클래스에서Multiselect-Listbox (MVC3 면도기)의 항목을 미리 선택하십시오.

번호 : 모델에

public class Foo{ 
    private int _id; 
    private string _name; 

    public string Name{ 
     get{ 
      return _name; 
     } 

    public int Id { 
     get{ 
      return _id; 
     } 

} 

코드 : cshtml에서

public class FooModel{ 

    private readonly IList<Foo> _selectedFoos; 
    private readonly IList<Foo> _allFoos; 

    public IList<Foo> SelectedFoos{ 
     get{ return _selectedFoos;} 
    } 

    public IList<Foo> AllFoos{ 
     get{ return _allFoos;} 
    } 

} 

코드 :

@Html.ListBoxFor(model => model.Flatschels, 
     Model.AllFlatschels.Select(fl => new SelectListItem { 
      Text = fl.Name, 
      Value = fl.Id.ToString(), 
      Selected = Model.Flatschels.Any(y => y.Id == fl.Id) 
    }), new {Multiple = "multiple"}) 

나는 다른 많은 것들을 시도했지만 아무것도 작동하지 않습니다. 누군가가 도울 수 있기를 바랍니다.

답변

31

나는 이유를 설명 할 수는 없지만 실제로 작동시킬 수있었습니다. 이 중 하나가 작동 :

@Html.ListBoxFor(m => m.SelectedFoos, 
      new MultiSelectList(Model.AllFoos, "ID", "Name"), new {Multiple = "multiple"}) 

@Html.ListBoxFor(m => m.SelectedFoos, Model.AllFoos 
      .Select(f => new SelectListItem { Text = f.Name, Value = f.ID }), 
       new {Multiple = "multiple"}) 
문제는 SelectListItem에 선택한 속성이 무시되고 할 것으로 보인다

대신 ToString() 당신이 당신의 Foo 클래스에이를 추가해야합니다 그래서 만약 방법이 호출되고 (!) :

public override string ToString() 
{ 
    return this.ID; 
} 

나는 (이가 와이어를 통해 전달되는 문자열로 평평하게됩니다) 요청에 걸쳐 지속 할 수있는 함께 할 수있는 뭔가가 추측하고있어,하지만 조금 혼란!

+0

고마워요. 나는 그것을 작동 시켰어. 두 번째 코드 만 작동하고 그것이 나에게 보이 긴하지만 ToString()을 재정의 한 것이 아닙니다. 내 ID 속성은 int이고 고유 한 문자열 (guid.ToString())을 반환하는 속성 키를 추가했습니다. – Tobias

+0

이상한. ToString을 설명 할 수는 없지만 그것을 기쁘게 정리했습니다 :-) –

+0

ToString() 때문에 분명히있었습니다. Microsoft 포럼에 질문을 올렸습니다. 답변을 얻으 려니와 아마 왜 정보를 (현재 얼마나 오래) 가지고 있었는지 알 수 있습니다. – Tobias

0

MVC5에서는 다중 선택과 함께 ListBoxFor를 직접 사용할 수 있습니다. 보기를로드하는 동안 selectedItem에 항목 목록이 있어야합니다.

@Html.ListBoxFor(m => m.SelectedItem, new MultiSelectList(Model.Item.ToList(), "Value", "Text"), new { @class = "form-control" }) 
관련 문제