2016-06-10 1 views
0

MVC에서 머리를 감싸고 있습니다.ASP.Net MVC 5로드시 목록 상자에서 여러 항목 선택

목록이 있습니다. 이 중 일부를 기본적으로 선택하여 화면을로드해야합니다.

항목을로드하는 것은 기본적으로 일부 항목을 선택하려고하면 나를 위해 작동하지 않습니다.

내가 잘못 가고있는 생각이 있으십니까?

나는 내 요구에 대한 대답을 번역 할 수는 없지만 비슷한 질문에 대한 많은 대답을 알고 있습니다.

여기에 제가 가지고있는 코드가 있습니다. 또한 html 헬퍼의 다양한 옵션을 이해하려고합니다. 해결책을 게시 할 때이를 고려하십시오.

이것은 내 코드의 가장 최근 반복입니다. 난 내 컨트롤러에서 .... 무리를 통해

를 갔다 내 defaultSelected.Contains을 테스트하기위한 시도

public ActionResult Index() 
{ 
    ViewBag.Statuses = AddStatuses(); 
    return View(); 
} 


private MultiSelectList AddStatuses() 
{ 
    string[] defaultSelected = { "Ready", "Done", "Error" }; 
    List<SelectListItem> listItems = new List<SelectListItem>(); 
    List<Status> s = allTypes.GetStatuses(); 
    s.ForEach(status => 
    { 
     listItems.Add(new SelectListItem() 
     { 
      Text = status.Name, 
      Value = status.ID.ToString(), 
      Selected = true,// defaultSelected.Contains(status.Name) 
     }); 
    }); 
    return new MultiSelectList(listItems, "Value", "Text"); 
} 

, 난 그냥 ALL 참으로 ... 여전히 didn를 선택하는 데 주석 't 작업 ...

나는

@Html.DropDownList("Statuses", null, null, new { @class = "form-control", multiple = true, id="queueStatuses" }) 

@Html.ListBox("Name", ViewBag.Statuses as MultiSelectList, new { @class = "form-control", id = "queueStatuses" }) 

@Html.ListBox("Statuses", null, new { @class = "form-control", id = "queueStatuses" }) 

나는) 내가 뭐하는 거지 이해하지 못하는와 b)가 동작하지 않습니다 내보기에 이러한 시도 ... :)

내가 찾고 있어요 : 당신은 당신의 목록 상자의 항목을 전달하는 뷰 모델의 사용자와 함께 ListBoxFor 도우미 방법을 사용할 수 있습니다

enter image description here

답변

0

@Shyju. 나는 당신의 대답이 효과가 있다고 확신합니다.

내 의견에 언급했듯이이 인스턴스에서는 뷰 모델을 보유하고 싶지 않습니다. 나는 이것을 구현할 수있는 간단한 방법을 찾고 있었다.

내가해야 할 일은 모두 내 MultiSelectList을 변경하고 선택한 '값'의 배열을 전달하는 것입니다.

이 내 문제 해결

private MultiSelectList AddStatuses() 
     { 
      string[] defaultSelected = { "3", "5", "6" }; 
      List<SelectListItem> allItems = new List<SelectListItem>(); 
      List<Status> s = allTypes.GetStatuses(); 
      s.ForEach(status => 
      { 
       allItems.Add(new SelectListItem() 
       { 
        Text = status.Name, 
        Value = status.ID.ToString(), 
       }); 
      }); 
      return new MultiSelectList(allItems, "Value", "Text", defaultSelected); 
     } 

을 그리고 내 ListBox은 동일합니다. 이 끝 부분에갔습니다 :

@Html.ListBox("status", (IEnumerable<SelectListItem>)ViewBag.Statuses, new { @class = "form-control" }) 
1

.

그래서, 당신의 GET 작업을 지금

public class CreateIssue 
{ 
    public List<SelectListItem> Statuses { set;get;} 
    public int[] SelectedStatuses { set;get;} 
} 

볼이의 객체를 만듭니다 Statuses 수집을로드 뷰에 보낼 액션 메소드에서 데이터를 전송하는 새로운 뷰 모델을 만들 수 있습니다. 일부 항목을 미리 선택하려면 SelectedStatuses 속성을 설정하십시오.

public ActionResult Index() 
{ 
    var vm = new CreateIssue(); 
    //Hard coded for demo. You may replace with values coming from db table. 
    vm.Statuses = new List<SelectListItem> { 
    new SelectListItem { Value="1", Text="Ready"}, 
    new SelectListItem { Value="2", Text="Done"}, 
    new SelectListItem { Value="3", Text="Building"}, 
    new SelectListItem { Value="4", Text="Error"}, 
    }; 
    //For preselecting items, set it here 
    vm.SelectedStates=new int[] { 2,3}; 
    return View(vm); 
} 

하고 강하게 뷰 모델에 입력 된 사용자보기에서 ListBoxFor 도우미 메서드를 사용합니다.

@model CreateIssue 
@using (Html.BeginForm()) 
{ 
    <label>Select many statuses</label> 
    @Html.ListBoxFor(m => m.SelectedStatuses, Model.Statuses) 
    <input type="submit"/> 
} 
+0

어떻게하면 ViewBag에서 작동하도록 할 수 있습니까? 여기서는 viewmodel을 사용하지 마십시오. 페이지에서 Ajax를 사용하여 전체 viewmodel을 필요로하지 않을 것입니다. - 와우는 기본 항목을 선택하는 데 많은 어려움이 있습니다 .... – Darren

+1

뷰 모델은 아약스 메소드에 어떤 영향을 줍니까? – Shyju

+0

정말 아니지만 이걸 간단하게하려고합니다. 귀하의 코드, 비록 내가 확신하는 것보다 더 많은 가치를 가진 목록 상자를로드하고 일부 미리 선택해야한다고 생각보다 필요합니다. 또한 (저는 MVC에 새로 온 것입니다) ActionResult Create가 있습니다 - 이것은 무엇이며 어떻게 호출 될까요? 색인 작업이 있습니다. 내 컨트롤러가 부르는 사람이 아닌가요? 이 행동을 어떻게 부르는가? – Darren

관련 문제