2013-05-03 3 views
0

나는 Form.aspx 페이지가 있습니다. Post-Back에서 복잡한 유효성 검사가 발생합니다. 오류가 발견 된 경우 :이전 페이지로 포스트

lblErrors.Text = "There are Errors" 

페이지에 나열된 오류를 모두 해결하고 제출을 누르십시오. 사후 돌아 가기 유효성 검사 오류를 발견하지 않았기 때문에 : Confirm.aspx에

lblErrors.Text = "" 
Response.Redirect("Confirm.aspx") 

를, 제출 된 데이터를 검토 할 수 있습니다. 나는 "편집으로 돌아 가기"버튼을 가지고 있습니다.

버튼을 클릭하면 뭔가를 편집하고 무엇을 편집 할 수 있습니까? ... lblErrors.Text는 "오류가 있습니다"라고 표시합니다. 나는 Go Back 기능이 캐쉬 된 페이지를 가져 오는 것을 깨달았지만 Form Post-Back 동안 Text를 바꾼 이후로 돌아올 때 비어있을 것이라고 기대했다. 그렇지 않았습니다.

간단히 말해 사용자가 전의 viewstate 영광으로 이전 페이지를 포스트 백 할 수 있기를 바랍니다. 그 시점에서 Page_Load에서 lblErrors를 처리 할 것입니다.

많은 필드가 있으며, 그 중 대부분이 이전 선택에 종속 된 웹 서비스 데이터 소스 드롭 다운입니다. 세션 변수로 재실행하고 확인하도록 빨아 들일 것입니다. 따라서 모든 필드의 값을 변수에 저장하고 정기적 인 리디렉션을 수행하는 것은 내가 원하는 바가 아닙니다. 나는 내가 깨닫지 못하는 PreviousPage에 대해 뭔가를 기대하고있다.

+1

대부분의 경우 Confirm.aspx 페이지에 오류를 게시하고 다른 페이지에서 오류가 포함 된 요청 변수를 읽어야합니다. 또 다른 옵션은 서버에 제출하기 전에 양식 클라이언트 측의 유효성을 검증하는 것입니다.이 경우 서버 측 유효성 검사도 수행해야합니다. 클라이언트 쪽 유효성 검사에만 의존하지 마십시오. –

+0

카메론에 감사드립니다. 나는 계속 진행하여 두려운 클라이언트 측 검증을 설정했다. 내가 실제로 한 것은 코드를 추가하는 것이 었습니다. 따라서 사용자가 오류가있는 필드를 변경하면 오류 텍스트가 사라집니다. 물론 간단하고 작동하지만 Confirm.aspx에 여전히 제출 한 다음 돌아가서 페이지가 마지막으로로드 된 방식이므로 오류 텍스트가 표시됩니다 (클라이언트 측 JS가 "stick"하지 않습니다. 페이지의 캐시와 함께). 나는 여전히 이전 (양식) 페이지로 포스트 백하는 방법이 필요하다고 생각합니다. – Suamere

+0

다른 옵션이없는 경우 오류를 확인 페이지로 옮깁니다. 그것은 폼 클래스에서 폼 객체를 제어하는 ​​것과 같이 깔끔한 또는 프로 우스 (실제 단어, look up)처럼 거의 들리지 않습니다. 왜 페이지 캐싱을 사용할 수없는 경우 페이지가 다시로드되지 않는지 이해할 수 없습니다. No-Cache가 꺼져 있어도 ASP.Net 문제는 ​​아니며 ASP.Net의 옵션이 아닙니다. Back이 눌러 졌을 때 페이지를 다시 요청하도록 브라우저가 개발되지 않았기 때문입니다. 그것이 내가 ASP.Net에 이전 페이지에 다시 게시 할 수있는 (아마도 PreviousPage 또는 그 밖의 유사한 항목에서) 알지 못했던 것이 있기를 바란 이유입니다. – Suamere

답변

0

을하지만, 나는 현재의 의미를 알아 내기 위해 상관 없어 사고. 내를 Page_Load에서

내가이 짓 : 즉

Try 
     Dim strValidation As String = String.Empty 
     Dim PostbackType As String = String.Empty 

     If Session("Submit") IsNot Nothing Then 
      If Session("Submit").ToString = "Submit" Then 
       PostbackType = "Submit" 
      Else 
       PostbackType = "Back" 
      End If 
      Session("Submit") = Nothing 
     End If 

     If PostbackType = "Submit" Then 
      Session("Submit") = "Back" 
      Response.Redirect("Confirm.aspx") 
     End If 

     If IsPostBack AndAlso PostbackType <> "Back" Then 
      If Request.Form("__EVENTTARGET").ToString.Contains("btnSubmit") Then 
       strValidation = ValidateForm() 
       If strValidation.Length > 0 Then 
        lblErrors.Text = strValidation 
       Else 
        lblErrors.Text = "" 
        Session("Submit") = "Submit" 'Set so the page fully loads into the user's cache, then re-submits for the real submit 
        Dim jsLink As New HtmlGenericControl("script") 
        jsLink.InnerHtml = "javascript:__doPostBack('btnSearch','')" 
        jsLink.Attributes.Add("type", "text/javascript") 
        Me.Controls.Add(jsLink) 
       End If 
      End If 
     End If 
    Catch ex As Exception 
     System.Diagnostics.Debug.WriteLine(ex.Message) 
    End Try 

을, 나는 페이지가 실제로 다음 실제 제출을 위해 어느 다시 즉시 포스트 백을 검증 한 후 자신의 캐시에로드 할 수 있습니다.

오랫동안 양식이 유효 함을 나타내는 조건부에서 리디렉션을 가져 왔습니다. 따라서 Validated가 되어도 페이지가 완전히로드되어 사용자 캐시로 이동합니다. 하지만 대신 포스트 백을 자동으로 수행하는 자바 스크립트를 페이지 끝에 추가하여 모든 사용자에게 깜박입니다. 그 포스트 백에서, 내 세션 변수는 kthx가 말하길, realz tho를 위해 나를 제출합니다. 기술적으로 브라우저가 마지막으로 본 페이지는 깨끗합니다.

그래도 진짜 대답이 있다면 듣고 싶습니다. 이 해결 방법을 사용하려면 사용자 PC에서 Javascript가 활성화되어 있고 "깜박임"이 필요합니다.

키커가 있습니다 ... 사용자가 지금 "뒤로"이동하면 해당 jsLink 스크립트 컨트롤은 여전히 ​​페이지에 있습니다 ... 그리고 페이지가 캐시 되어도 실행되고 포스트 백을 수행합니다. 그래서 이것과 함께, 뒤로 버튼은 실제로 기술적으로 내 page_load를 트리거합니다 (이것이 사실이라면 내 Page_Load 포스트 백 물건을 건너 뛰어 처리합니다). 하지만이 사실을 알고도 코드를 정리하는 데 도움이되지 않습니다. 미적 이유로 JavaScript 만 사용하고 기능에 의존하지 마십시오.

0
당신은 페이지 간 게시에 대한 이러한 접근 방식 사용으로 보일 수 있습니다

이 같은 http://msdn.microsoft.com/en-us/library/ms178139(v=vs.100).aspx

뭔가 :이 모든 논리를 무시

if (Page.PreviousPage != null) 
{ 
    Label lblError = 
     (Label)Page.PreviousPage.FindControl("lblError"); 
    if (lblError != null) 
    { 
     lblError.Text = "There are Errors"; 
    } 
} 
+0

다시 한번 g- 소스 카메론입니다. 어쨌든, 포스트 백은 원래 폼 포스트 값으로 자체 페이지를 다시로드하는 기본 asp.net 함수입니다. 교차 페이지 다시 게시는 다시로드하는 대신 "PostBackURL"을 제공하는 경우 양식 게시를 다른 페이지로 보냅니다 (일반 HTML은 양식 게시 대상과 동일 함). 이전 페이지의 컨트롤에 연결하는 것이 좋은 시도이지만, 나는 그것을 시도했다. 비록 내가 lblError의 값을 바꿀 수는 있지만, 사용자가 그 페이지로 "돌아 간다"면, 나는 방금 변경 한 것이 아닌, 마지막으로 캐시 된 것을보고있는 것입니다. Poo Poo. – Suamere

관련 문제