본문 바로가기

.NET/asp.net

CheckBoxList 다중선택 정보 읽어와 체크시 문제

728x90
반응형
http://darkangelus.tistory.com/entry/aspnet-CheckBoxList-다중선택-저장-읽기 에서 알아본 체크박스리스트의 다중선택 정보를 읽어오는 부분에서 특정한 문법이 나올때 버그가 생기는 것을 확인을 하였습니다.

우선 저장하는 부분에서는 문제가 없었는데 읽어와 체크박스에 반영하는 부분에서 문제가 생겼습니다. 어떤문제인가 하니 마스터페이지나 중첩마스터 페이지를 사용할 때(필자의 경우 이때 문제가 발생했습니다) 체크박스리스트를 DB나 File에서 데이터를 가져와 Contorl.DataBind()로 생성했을 경우 생기게 됩니다. 마스터페이지나 해당 페이지에서 <%# %> 문법을 써야 되어 Page.DataBind(); 를 썼을 경우 체크박스에 체크가 되지 않는 경우가 발생하는 것입니다.

디버깅 모드로 따라가 보았을 때도 분명히 체크하는 모듈이 제대로 돌아가는걸 확인할 수 있지만 실질적으로 페이지에는 체크가 되지 않았습니다. 결국 마스터 페이지까지 디버그 Break를 찍어 보니 우선 페이지에서 체크박스리스트의 데이터 바인드가 일어나 체크박스를 생성하고 체크를 해줍니다. 그 이후 마스터페이지에서 Page.DataBind()가 일어나면서 생성되었던 체크박스의 체크리스트가 다 초기화 되는 문제였죠. 필자는 이문제 때문에 거진 하루를 보냈답니다 ㅠ

한참 이것 저것 만져보면서 해결 방안을 찾다가 찾은 방법은 Page_Load 이후의 이벤트에서 체크박스리스트에 체크할 리스트들을 가져와 그때 체크하는 방법입니다.

protected void Page_Load(object sender, EventArgs e)

{

    if (!IsPostBack)

    {

        MakeCheckBoxItem(cbTest);

        string checkList = ReadSaveFile();

        FillCheckBoxList(cbTest, CheckListSplit(checkList));

    }

}

위 코드는 http://darkangelus.tistory.com/entry/aspnet-CheckBoxList-다중선택-저장-읽기 에서 만들었던 Page_Load 이벤트 부분입니다. 여기서 문제였던것이 FillCheckBoxList가 일어난 뒤에 마스터페이지에서 다시 Page.DataBind()가 일어나서 체크되었던 부분이 다시 바인드 된다는거에 문제가 있었던거 같습니다. 그래서 해결한 방법입니다.

protected void Page_Load(object sender, EventArgs e)

{

    if (!IsPostBack)

    {

        MakeCheckBoxItem(cbTest);

    }

}

 

protected void Page_PreRender(object sender, EventArgs e)

{

    string checkList = ReadSaveFile();

    FillCheckBoxList(cbTest, CheckListSplit(checkList));

}


위에서 보는 것과 같이 Page_Load부분에서는 체크박스만 바인드 해주고 그 다음다음으로 일어나는 이벤트 Page_PreRender이벤트에서 체크박스를 체워주는 것죠. 그러면 Page.DataBind()에 영향을 받지 않고 제대로 체크가 되어 나오는 것을 확인할 수 있습니다.

다른분들은 저와 같은 문제로 시간 버리시는일 없길 바라며 포스트합니다.

감사합니다.

728x90
반응형