문제

유형의 강력한 유형보기가 있습니다

List<List<MyViewModelClass>>

외부 목록에는 항상 두 개의 목록이 있습니다 List<MyViewModelClass>. 두 개의 외부 목록 각각에 대해 확인란 그룹을 표시하려고합니다. 각 세트에는 임의의 선택이있을 수 있습니다.

내보기 모델 클래스는 다음과 비슷해 보입니다.

public class MyViewModelClass
{
    public Area Area { get; set; }

    public bool IsGeneric { get; set; }

    public string Code { get; set; }

    public bool IsChecked { get; set; }
}

따라서 최종보기는 다음과 같습니다.


적용되는 것을 선택하십시오 :

첫 번째 선택 세트 :

  • 엑스 옵션 1
  • 엑스 옵션 2
  • 엑스 옵션 3
  • 등.

두 번째 선택 세트 :

  • 엑스 두 번째 옵션 1
  • 엑스 두 번째 옵션 2
  • 엑스 두 번째 옵션 3
  • 엑스 두 번째 옵션 4
  • 등.

확인란이 표시되어야합니다 MyViewModelClass.Area.Name, 그리고 그들의 가치는 관련되어야합니다 MyViewModelClass.Area.Id. 확인 된 상태는 물론 관련이 있습니다 MyViewModel.IsChecked.

의문

어떻게 사용해야하는지 궁금합니다 Html.CheckBox() 또는 Html.CheckBoxFor() 내 체크 박스를 표시 할 도우미? 물론이 값을 포스트 백에서 서버로 가져와야합니다.

컨트롤러 조치를 취하고 싶습니다.

public ActionResult ConsumeSelections(List<List<MyViewModelClass>> data)
{
    // process data
}

public ActionResult ConsumeSelections(List<MyViewModelClass> first, List<MyViewModelClass> second)
{
    // process data
}

일을 더 간단하게 만들면 다음과 같은 별도의보기 모델 유형을 만들 수 있습니다.

public class Options
{
    public List<MyViewModelClass> First { get; set; }

    public List<MyViewModelClass> Second { get; set; }
}

컨트롤러 액션의 첫 번째 버전을 다음과 같이 변경할뿐만 아니라 다음과 같습니다.

public ActionResult ConsumeSelections(Options data)
{
    // process data
}
도움이 되었습니까?

해결책 2

해결책

이것은 전혀 복잡하지 않다는 것이 밝혀졌습니다. 당신이해야 할 일은 컨트롤을 적절하게 이름을 지정하면 모든 것이 함께 묶여 있습니다. 그래서. 당신의 컨트롤이 무엇이든, 그들은 항상 다음과 같이 명명되어야합니다.

name="first[0].propName"
name="first[1].propName"
name="first[2].propName"
name="first[3].propName"
...

// or
name="first[0].data[0].property"
name="first[0].data[1].property"
name="first[0].data[2].property"
...
name="first[1].data[0].property"
name="first[1].data[1].property"
...

이 모든 것이 묶일 것입니다 List<SomeType> first 컨트롤러 동작 매개 변수 (두 번째는 컬렉션 내부에 또 다른 컬렉션이 있습니다).

매우 중요한 메모
JavaScript를 사용하여 이러한 컨트롤을 동적으로 추가/제거하는 경우 인덱스가 0부터 연속적이며 간격이 없는지 확인해야합니다. 그리고 컬렉션에 동적 수의 요소가있는 멋진 작업 앱이 있습니다.

당신은 그것에 대해 읽을 수 있습니다 내 블로그 게시물 또한.

다른 팁

일반적으로 나는 내가 만들고 싶은보기를 "모델"하는 유형 (모델)을 만듭니다. 즉

public class FooViewModel
{
    public List<Option> General { get; set; }
    public List<Option> Others { get; set; }

    //Some Methods and other properties
}
public FooController :...
{
    private FooViewModel fooViewModel = new FooViewModel();
}

편집 : 살펴보십시오 이 게시물, 정확히 당신이 원하는 것입니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top