2010-01-07 7 views
0

이전에 이와 같은 작업을 수행했음을 알았지 만 지금 작동하지 않는 이유는 알 수 없습니다. ListBox에 일부 텍스트 상자가 있습니다. 버튼을 클릭하면 해당 상자에서 텍스트를 읽고 싶습니다 (링크 버튼, 무엇이든).ListView 필드가 게시되지 않음

protected void Page_Load(object sender, EventArgs e) 
{ 
    lb_chapter_add.Click += lb_chapter_add_Click; 

    if (!IsPostBack) 
    { 
      lv_chapters.DataSource = new List<Foo>() { new Foo() { Name = "harbl"} }; 
      lv_chapters.DataBind(); 
     } 
    } 

void lb_add_Click(object sender, EventArgs e) 
{ 
    foreach (ListViewDataItem item in lv_bar.Items) 
    { 
     var txt_foo = (TextBox)item.FindControl("txt_foo"); 
     Response.Write("foo: " + txt_foo.Text); 
    } 
    Response.Write("<br />the end"); 
    Response.End(); 
} 

그러나 나는 txt_foo에 텍스트를 입력하고 lb_add 클릭하면 내가 보는 것은 그냥 "말"입니다 :

 <asp:ListView runat="server" ID="lv_bar" EnableViewState="true"> 
      <LayoutTemplate> 
       <table> 
        <tr> 
         <th>Foo</th> 
        </tr> 
        <tr runat="server" id="itemPlaceholder"></tr> 
       </table> 
      </LayoutTemplate> 
      <ItemTemplate> 
       <tr> 
        <td><asp:LinkButton ID="lb_delete" CausesValidation="false" runat="server" Text="Del" /></td> 
        <td><asp:TextBox id="txt_foo" runat="server" /></td> 
       </tr> 
      </ItemTemplate> 
     </asp:ListView> 
     <asp:LinkButton ID="lb_add" CausesValidation="false" runat="server" Text="Add" /> 

그리고 여기는 관련 코드 숨김 물건입니다. 여기서 내가 뭘 잘못하고 있니?

+0

foreach에서는 lv_bar가 아니어야합니까? –

+0

예, 죄송합니다. 붙여 넣기 전에 실제 코드를 일반화하려고했으나 문제가 아닙니다. –

답변

1

DataSource로 비 영구 객체를 사용하는 것이 문제입니다.

버튼을 클릭하면 포스트 백이 생성되고 lv_chapters에는 항목이 없습니다. foreach가있는 줄에 중단 점을 설정하면 lv_chapters.Items가 null이거나 Count 속성이 0을 반환합니다.

+0

알았어, 나는 그 행동에 주목했다. 그렇다면 DataSource로 무엇을 사용해야합니까? –

+0

내 마음 속에 떠오르는 한 가지 가능성은 ObjectDataSource입니다. Asp.net은 데이터 소스의 "지속성"을 자동으로 관리합니다. 또 다른 해결책은 모든 포스트 백에서 ListView를 바인딩하는 것입니다. 그러나 이것은 지금까지는 제한적이라는 것을 명심하십시오. 모든 Page_Load에서 목록을 바인드하고 이미지 버튼에 대한 Event_Handler가 절대로 존재하지 않을 것이기 때문에 (이미지 버튼과 같은) 포스트 백을 생성하는 해당 목록 뷰 내의 컨트롤을 가질 수 없습니다. eventhandler가 호출되기 전에 데이터 소스를 리 바인드하면 발생 된 이벤트가 파기되기 때문에 실행됩니다. – citronas

+0

ObjectDataSource는 의미가 있지만 "ObjectDataSource의 TypeName 속성에 지정된 형식을 찾을 수 없습니다"라는 메시지가 계속 나타납니다. –

관련 문제