2011-08-09 6 views
1

이상한 상황이 있습니다. 내 FormView 컨트롤에서는 레이아웃을 위해 <table>을 넣었습니다. 행 (<tr>)에 IDrunat="server"을 추가했습니다. 인서트는 데이터 중 일부만 저장했는데 이상하다고 생각했습니다. 나는 그 필드가 저장된 이유와 다른 필드가없는 이유를 보았습니다. 유일한 차이점은 ID 또는 runat="server"<tr>에 추가하지 않았기 때문입니다. "runat"을 제거하면 삽입물이 정상적으로 작동합니다.테이블이있는 Formview 컨트롤, runat 서버에 설정된 tr의 컨트롤이 삽입되지 않음

컨트롤 또는 FormView이 초기화 될 때 대 행이 초기화되는 방식과 관련이 있다고 가정합니다. 이것이 일어나는 이유는 무엇입니까? 지금은 테이블 행에서 ID을 제거하려고합니다.

답변

2

당신의 사고 방식은 옳습니다.

FormView은 최상위 컨트롤 만 봅니다. 의도 한 입력 컨트롤 중 하나를 다른 서버 쪽 컨트롤 안에 포함 시키면 FormView은 그것을 보지 못합니다 (바깥 쪽 컨트롤 안에 숨겨져 있습니다).

<tr ID="row1" runat="server"> 
    <asp:TextBox ID="myTB" runat="server">12</asp:TextBox> 
</tr> 

유일한 FormView :이 있던 경우에도 귀하의 코드 숨김 당신은 <tr>

따라서 서버 측에서 입력 태그를 얻기 위해 FindControl 방법을 사용해야 할 것 최상위 요소 (<tr>)입니다. 당신이 한하지 않는 한 당신은 당신의 코드 숨김TextBox을 볼 것이 :

TextBox myTB = (TextBox)row1.FindControl("myTB"); 

그래서 내 제안이 <tr> 요소에서 "RUNAT"및 "ID"태그를 떠나야하는 것입니다; 그것들은 단지 디스플레이 목적을위한 것이기 때문에, 당신은 서버 측에서 그것들이 실제로 필요하지 않습니다.

조금 더 명확 해지기를 바랍니다.

+0

여전히 이와 관련하여 게임해야합니다. 그 행을 보이지 않게 설정하기 위해 tr을 사용했습니다 ... 다른 기준에 따라. 그러나 FindControl을 사용하여 언급 한 것처럼 텍스트 상자를 확인할 수 있습니다. 최상위 요소에 대한 정보를 조금도 알지 못했습니다. –

+0

@MKenyonII 그럼 도움이 되었기 때문에 기쁩니다 (적어도 조금은). 행운을 빕니다! – jadarnel27

관련 문제