2014-05-13 3 views
0

SessionParameters가 일반 매개 변수와 반대로 사용되는 방법을 모르겠다. 내가 뭘하려는 건가요 업데이트 또는 삽입 (PageLoad 이벤트 디버깅을 기반으로) 존재하는 것으로 알고 세션 변수 "StaffID"에서 값을 기반으로 내 데이터베이스에 레코드를 삽입합니다. 내 "StaffID"세션이 실제로 NULL (철저한 디버깅 후 찾은) 것으로 밝혀지며 Null 값이있는 테이블을 업데이트하려고 시도하는 것에 대한 예외가 발생합니다. 내의 SqlDataSource 따라서이다올바르게 asp.net에서 세션 매개 변수를 사용하는 방법

은 ...

<asp:SqlDataSource ID="SqlDataProgmDetails" runat="server" ConnectionString="<%$ ConnectionStrings:ATCNTV1ConnectionString %>" 
        UpdateCommand="UPDATE tblStudentProgramReg SET StaffModified = @StaffModified, DateModified = GETDATE() WHERE (ProgramEnrolmentID = @ProgramEnrolmentID)"> 
        <UpdateParameters> 
         <asp:Parameter Name="EnrolmentDate" Type="DateTime" /> 
         <asp:Parameter Name="StudentProgramNotes" Type="String" /> 
         <asp:Parameter Name="TerminationDate" Type="DateTime" /> 
         <asp:Parameter Name="StudProgEnrolStatusID" /> 
         <asp:Parameter Name="QualificationCode" /> 
         <asp:ControlParameter ControlID="gvPrograms" Name="ProgramEnrolmentID" Type="Int32" PropertyName="SelectedValue" /> 
         <asp:SessionParameter Name="StaffModified" SessionField="StaffID" /> 
        </UpdateParameters> 
rs> 
       </asp:SqlDataSource> 

내 위해 DetailsView를 업데이트 할 때 나는 지칠대로 지친 얻을 "문자열 또는 이진 데이터가 잘립니다. 문이 종료되었습니다." 오류.

나는 위의 SqlDataSource의 업데이트 단계에서 한 지점에 확실히 존재하는 "StaffID"세션 변수가 NULL이기 때문에 이러한 상황이 발생하고 있음을 알고 있습니다.

내가 코드 숨김에서 값을로드 강제로 알게되었다 주위 유일한 방법 ...

protected void SqlDataProgmDetails_Updating(object sender, SqlDataSourceCommandEventArgs e) 
{ 
    if (Session["StaffID"] != null) 
    { 
     e.Command.Parameters[5].Value = Session["StaffID"].ToString().Trim(); 
    } 
} 

protected void SqlDataProgmDetails_Inserting1(object sender, SqlDataSourceCommandEventArgs e) 
{ 
    if (Session["StaffID"] != null) 
    { 
     e.Command.Parameters[8].Value = Session["StaffID"].ToString().Trim(); 
    } 
} 

하지만 내가 왜이 일을해야합니까?

내 ASP 페이지의 SessionParameter 요청에 따라 StaffID가 자동으로로드되어야한다고 생각했을 것입니다.

내가 말했듯이, SessionParameters (또는 세션 변수가 작동하는 방식)가 일반적으로 어떻게되는지 잘 모르겠습니다. 그렇다면이 코드가 작동하도록 코드 비움을 사용해야하는 이유를 설명해 주시면 감사하겠습니다.

답변

1

Session 개체가 당신을 위해 유지됩니다 사실 IDictionary<string, object>,에 감사드립니다. 그것은 세션 당 지속됩니다. 새 세션이 시작되면 클라이언트는 고유 세션 식별자를 사용하여 서버에서 쿠키를 수신합니다.

각 요청에서 클라이언트는 쿠키를 서버로 보내고 global.asaxSession 사전에 다시 채 웁니다. 따라서 사용자가 인증 할 때 코드 숨김에서 Session[UserId]을 수행한다고 가정하면, 이후의 각 요청에서 var UserId = Session[UserId]을 수행 할 수 있으며 세션이 "활성"인 동안 저장 한 값을 받게됩니다.

세션에서 값을 복원하는 것은 매우 논리적입니다. HTTP는 state-less이기 때문에 Session은 statefulness를 시뮬레이션하기위한 메커니즘 중 하나입니다.

+0

감사합니다. Elad. 그래서 여러분이 말한 것은 코드 숨김에서 위에서했던 것처럼 세션 변수를 복원하는 것이 실제로 유일한 방법이라는 것입니다. 따라서 논리적이며 수용 할 수 있습니까? – Fandango68

+0

예,이 사용법은'WebForms' 이야기의 큰 부분입니다. 이것은 정확하게 세션을 위해 설계된 것입니다. –

+0

감사합니다. 당신의 대답은 그 때입니다. – Fandango68

관련 문제