ViewState 저장소에 대해 직렬화 가능한 클래스 개체가 C # ASP.net에서 작동하지 않습니다.

루터

내 ListBox를 저장하는 패널을 만들었습니다. 내 목표는 페이지에서 Button 컨트롤을 누를 때 동적으로 새 Listbox를 추가하는 것입니다.

List 클래스를 상속하는 MyList 클래스를 만들고 [Serializable] 태그를 적용했습니다. viewstate에 개체를 저장하기 위해 직렬화를 적용했습니다.

MyList 클래스는 동적으로 생성 된 모든 ListBox를 저장합니다.

질문 :

  • 코드가 실행되면 페이지가로드되지만 목록의 뷰 상태를 저장하기 위해 버튼을 클릭하면 오류가 발생합니다. 왜 그런가요?
  • 내가 아는 한 MyList 클래스를 직렬화하여 viewstate에 저장해야했는데 이것이 맞습니까?
  • MyList의 기본 클래스 (List)도 직렬화해야합니까?

    public partial class _default : System.Web.UI.Page
    {
        MyList<ListBox> myList;
    
        protected void Page_Load(object sender, EventArgs e)
        {
            myList = new MyList<ListBox>();
            myList.Add(new ListBox());
            Panel1.Controls.Add(myList[0]);
            Button1.Click += Add_ListBox1;
        }
    
        public void Add_ListBox1(object sender, EventArgs e)
        {
            ListBox temp_listBox = new ListBox();
            myList.Add(temp_listBox);
            Panel1.Controls.Add(temp_listBox);
            ViewState["ListBox_list"] = myList; 
        }
    }
    
    [Serializable]
    public class MyList<ListBox> : List<ListBox> 
    { 
    
    }
    

클릭하기 전에 laoded 페이지 :

여기에 이미지 설명 입력

버튼 클릭 후 오류 메시지 : 여기에 이미지 설명 입력

브라이언 맥케이

클래스를 [직렬화 가능]으로 표시했지만 직렬화 할 수없는 ListBox에 따라 다릅니다.

나는 약간의 인터넷 검색을했고 이것이 내가 기대했던 것보다 더 복잡해 보이지만 도움 될 수 있음을 발견 했습니다.

몇 가지 빠른 생각 :

  • 동적 콘텐츠는 WebForms에서 가장 취약한 부분 중 하나입니다. 보시다시피 포스트 백 후에 동적 콘텐츠가 손실되므로 어떤 방식 으로든 유지하고 다시 만들어야하기 때문입니다. 이러한 상황에서 저는 포스트 백을 제거하고 JavaScript에 더 많이 의존하여 브라우저가 재설정되지 않도록합니다 ... 그리고 이것은 새로운 MVC 모델이 빛을 발하는 곳 중 하나입니다. 모델이 실수로합니다). 사실,이 고통은 우리를 단일 페이지 응용 프로그램으로 밀어 붙이는 주요 요인 중 하나입니다.

  • 이러한 목록 상자와 관련하여 관심있는 내용을 포함하는 자신의 클래스를 작성하는 것이 더 나을 수 있습니다. 예를 들어 위치 및 내용은 단순한 문자열 일 뿐이며 대신 직렬화합니다. 그런 다음 자체 코드를 작성하여 직렬화를 해제합니다. ListBoxes로.

그건 그렇고 웹 양식에 반대하는 것은 없습니다. 지금 다른 창에 하나가 열려 있습니다!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관