2013-05-02 3 views
0

내 ASPX 파일에서 ASP : formview 내부에 InsertItemTemplate이 있습니다. 템플릿은 asp : textbox, droplists 등으로 만들어진 양식으로 구성됩니다. 양식은 사용자 입력을 받아 SQL 서버의 저장 프로 시저로 전달하여 데이터를 삽입합니다.템플릿의 ASP 요소가 현재 컨텍스트에 존재하지 않는 이유는 무엇입니까?

SP를 별도로 테스트했는데 정상적으로 작동합니다. 내 문제는 ASP 폼뷰와 템플릿이 나에게 의미가 없다는 것이다. 필드의 데이터 입력이 존재하지 않으므로 SP로 전달되지 않으므로 아무 것도 삽입되지 않습니다. 내 코드 숨김에 매개 변수를 추가 할 때 현재 컨텍스트에 매개 변수가 존재하지 않는다고 알려줍니다.

텍스트 상자 중 하나를 완전히 변경하지 않고 formview 외부로 복사하면 마술처럼 현재 컨텍스트에 존재합니다. 나의 무지를 용서하십시오. 그러나 삽입 될 정보를 실제로 전달할 수 없다면 삽입 템플릿의 요점은 무엇입니까?

(간결 함) 코드 :

<asp:FormView ID="PatientFormView" 
      DataSourceID="Sqldatasource1"  
      Gridlines="Both" 
      runat="server" DefaultMode="Insert" 
    HorizontalAlign="Left" Width="800"> 
... 
Provider Name: <asp:TextBox ID="NPI" runat="server" Width="257px" Text='<%#Bind("npi")%>' Font-Bold="True"></asp:TextBox> 
Patient MRN: <asp:TextBox ID="acctno" runat="server" ReadOnly="True" Width="257px" Text='<%#Bind("acctno")%>'></asp:TextBox> 

</InsertItemTemplate> 

그리고 코드 숨김 :

protected void Sqldatasource1_Inserting(object sender, SqlDataSourceCommandEventArgs e) 
{ 
    e.Command.Parameters["@NPI"].Value = NPI.Text.ToString(); 
    e.Command.Parameters["@acctno"].Value = acctno.Text.ToString(); 
} 

내가 NPI를 얻을 acctno이 현재 컨텍스트에 존재하지 않는 곳입니다.

그러나 양식보기에서 해당 ASP TXOXbox 중 하나를 복사해도 존재합니다. 나는 전체 템플릿을 제거 할 수 있다고 생각하지만이 컨텍스트 문제를 이해하고 싶습니다. 사전에

감사합니다. 나는 이것에 대한 설명을 찾으려고 노력했고, 내가 찾은 대부분은 적용되지 않거나이 프로젝트의 페이지에는없는 .design 파일을 사용하는 것을 가리킨다.

답변

1

템플릿 내에 <%# Bind("...") %>을 사용하고 있으므로 수동으로 매개 변수를 설정할 필요가 없습니다. Sqldatasource1_Inserting 메서드를 디버깅하는 경우 매개 변수가 이미 바인딩 된 컨트롤의 값으로 채워져 있음을 알 수 있습니다.

템플릿 내의 컨트롤은 고유하지 않을 수 있으므로 코드 숨김에서 직접 액세스 할 수 없습니다. 예를 들어 InsertItemTemplateEditItemTemplate에 ID가 "NPI"인 TextBox이있을 수 있습니다.

+0

의견을 보내 주셔서 감사합니다. 나는 아직 완전히 이해하지 못했지만 이것이 도움이된다. 내가 힘들게 시간을 보내고 왜, 심지어 중복 컨트롤이 없다는 것을 확인한 후에, 'Label1.Text = acctno.text.tostring();'과 같은 것을 할 수없는 이유가 있습니다. 코드 숨김에? 나는 그들이 텍스트 상자 중 하나에서 뭔가를 가져올 필요가있을 때 자바 스크립트를 사용하여 레이블을 채 웁니다. 그러나 그렇게해야한다는 것은 어리석은 것처럼 보입니다. 다시 한번, 나는 나의 무지에 대해 사과한다, 나는 ASP.NET에 비교적 익숙하다. 그리고 나는 관리하고있다. 그러나 나는 천천히 내가 좋아할 것보다 천천히있다. 시간 내 줘서 고마워. –

+0

@R_Scott : 중복 컨트롤이 없어도 나중에 복제본을 추가 할 경우를 대비하여 컴파일러는 템플릿의 컨트롤 필드를 생성하지 않습니다. 'InsertItemTemplate'을'EditItemTemplate'에 복사하자마자 코드 숨김이 작동을 멈춘다면 꽤 짜증납니다! –

+0

좋은 지적. 분명히 나는 ​​아직도 많은 것을 배우고있다. 감사합니다. –

관련 문제