2010-07-06 1 views
1

나는 사용자 등록 양식을 가지고 있습니다. 여기에는 등록을 위해 채워야하는 다른 페이지 (카드 정보 페이지)에 대한 링크가 있습니다. 사용자는 사용자 등록 양식의 몇 가지 필드를 채우고 카드 정보 페이지로 연결되는 링크를 클릭하십시오. 사용자가 카드 정보 페이지의 링크를 클릭하여 등록 페이지로 돌아 가면 등록에 입력 된 이전 세부 사항이 사라집니다. 그래서 카드 정보 페이지에서 재발행없이 등록 페이지로 리디렉션해야합니다. 나는 그것을 어떻게 성취 할 수 있는가?게시물없이 리디렉션

Response.Redirect()는 리디렉션에 사용됩니다.

답변

0

Server.Transfer()은 서버 측의 다른 페이지로 전송을 수행합니다.

업데이트 : 현재 페이지 Context.Items 속성을 쿼리 문자열로 원래 전송 된 상태로 채울 수 있습니다. 이것은 세션 상태와 유사하게 동작하지만 현재 요청으로 제한됩니다.

업데이트 2 :Server.Transfer() 방법은 부울 매개 변수 preserveForm를 받아 과부하를 가지고,이 보존 쿼리 문자열 매개 변수 : 당신은 내가하지 않습니다 다시 게시하지 않고이 작업을 수행 할 수

http://msdn.microsoft.com/en-us/library/aa332847(v=VS.71).aspx

+0

사용자가 쿼리 문자열 매개 변수가 필요한 정보 카드를 사용하므로 Server.Transfer는이 점에서 작동하지 않습니다. –

+0

걱정하지 마세요. 원하는 경우 쿼리 문자열을 보존 할 수 있다고 제안하는 것으로 보입니다. –

4

생각한다. 세션 상태에서 등록 페이지의 세부 정보를 저장 한 다음 사용자가 해당 페이지로 돌아 오면 세션 상태에서 필드를 다시 채우는 것이 좋습니다.

//eg in registration page 
protected void CardInfoLink_Click(object sender, EventArgs e) 
{ 
    //store details entered 
    Session["Registered"] = true; 
    Session["Username"] = txtUserName.Text; 
    //etc for any other fields 
    Response.Redirect("~/CardDetailsPage.aspx"); 
} 

Page_Load 메서드에서 세션 데이터가 있으면 세션에서 양식을 미리 채울 수 있습니다. 예 :

if (!Page.IsPostback && (bool)Session["Registered"]) 
{ 
    txtUserName.Text = (string)Session["Username"]; 
    //repopulate other fields as necessary 
} 
+0

예, 세션을 사용할 수 있지만 저는 다른 방법으로 생각하고있었습니다. 나는 사용자 등록 페이지 –

+0

에 더 많은 필드 (30)를 가지고있다. 세션이나 데이터베이스에 있는지, 아니면 쿠키에 저장했는지에 관계없이, 폼 정보 서버 측을 저장하는 것 외에 다른 방법이 있다고 생각하지 않는다. 서버 측 코드가 필요하다고 생각합니다). 일을 더 쉽게하려면 get/set 속성을 가진 간단한 클래스를 만들어 모든 양식 필드를 표현한 다음 해당 클래스의 인스턴스를 좀 더 관리하기 쉬운 세션 상태로 저장하십시오. 당신이 내가 원하는 것을 원한다면 알려주십시오. –

+0

감사합니다 ..! 대답을보고 나서 같은 것을 했어 :) –

1

다른 페이지로 리디렉션하면 무언가를 중지하지 않으면 첫 페이지의 모든 컨텍스트가 손실됩니다. 마음에 드는 옵션은 다음과 같습니다.

  1. 팝업 창에 카드 정보 페이지를 만듭니다. 이것은 메인 윈도우가 백그라운드에서 변경되지 않았 음을 의미합니다. 이 작업을 수행하는 데는 클라이언트 측 코드를 사용하는 것이 좋지만 서버 측 코드를 사용하여 여전히 가능하다면 약간 더 까다롭게 처리해야합니다.

  2. 리디렉션 전에 정보를 포스트 백에 저장하십시오. 이것은 세션이나 데이터베이스에있을 수도 있고 원하는 경우 쿠키로 클라이언트 측에서도 할 수 있습니다. 그런 다음 페이지를 다시 방문하면 정보를 저장했는지 자동으로 불러올 수 있는지 확인할 수 있습니다.

1

사용자를 다른 페이지로 리디렉션하면 해당 화면의 모든 캡처 된 정보가 손실됩니다. 보기 상태는 리디렉션에는 보관되지 않지만 포스트 백/콜백에만 적용됩니다.

리디렉션에서 정보를 유지하는 유일한 방법은 세션 변수, 해당 페이지로 돌아 오면 다시 채워 넣으십시오.

사용자가 정보 카드로 연결되면 정보를 저장 한 다음 답례로 값을 확인한 다음 다시 채우십시오.

0

값을 ViewState/Session에 저장하고 다른 페이지 (카드 정보 페이지)로 리디렉션 한 다음 등록 페이지로 돌아갈 때 값을 다시 채울 수 있습니다. 또는 pop-ups 또는 panels (표시/숨기기 Visible 속성 사용)을 동일한 페이지에 표시하면 사용자 입력을 유지할 수 있습니다. 서버 측 컨트롤을 사용하면 값이 지워지지 않습니다.

0

"다음 페이지로 이동"버튼을 클릭하면 모든 종류의 아약스 요청을 사용할 수 있습니다. 클릭하여 등록 데이터를 세션으로 복사하십시오. 그런 다음 반환 후 데이터를 다시 채우고 세션을 제거 할 수 있습니다. 코드는 다음과 유사해야합니다.

---------------- jquery ajax request ------------------ -----

function SetValuesIntoSession(value1, value2, value3) {   
     $.ajax(
     { 
      type: "POST", 
      url: WebServicePathAndName.asmx/InsertIntoSessionMethodName", 
      contentType: "application/json; charset=utf-8", 
      data: "{value1:'" + value1 + "', value2:'" + value2 + "', value3:'" + value3 + "'}", 
      dataType: "json", 
      success: function(response) { 
       if (response.d == "Yes") { 
        //do something in correct response 
       } 
       if (response.d == "No") { 
        //do something for incorrect response 
       } 
      }, 
      error: function(xhr) { 
       alert('Error! Status = ' + xhr.status); 
      } 
     });  
} 

아래는 웹 서비스의 코드로, 세션에 데이터를 삽입해야합니다. 웹 서비스에서 세션 상태를 사용하려면 "EnableSession = true"로 설정해야합니다.

--------------------- WebServicePathAndName.asmx ------------------

[WebMethod(EnableSession = true)] 
public void InsertIntoSessionMethodName(string value1, string value2, string value3) 
{ 

    Session[ "value1" ] = value1; 
    Session[ "value2" ] = value2; 
    Session[ "value2" ] = value3; 
} 

내가 생각하기에 나머지 코드는 구현하기 쉽습니다.