2010-05-04 3 views
3

두 개의 라디오 단추가있는 ASP.NET 페이지가 있습니다. 이 버튼은 자동 포스트 백을 사용하여 서버 측 로직을 실행합니다. 두 번째 단추를 선택하면 페이지가 다시 게시되고 두 번째 단추가 선택되었다는 메시지가 올바르게 표시됩니다. 브라우저의 뒤로 버튼을 클릭하면 버튼 1의 상태를 확인하는 메시지가 표시되는 동안 버튼 2의 상태가 확인 된 상태로 유지됩니다. 라디오 버튼과 메시지의 상태가 동기화되지 않아서 바람직하지 않은 상황이 발생합니다. 이것이 캐싱 문제라는 것을 알고 있지만, 브라우저가 이전의 레이블 상태를 기억하지만 라디오 버튼의 이전 상태를 기억하는 것이 이상하다는 것을 알게되었습니다.ASP.NET 라디오 단추 상태 및 뒤로 키

이 상황을 처리하는 가장 좋은 방법은 무엇입니까? 이 상황에서 캐시를 사용하지 않거나 뒤로 버튼을 사용하지 않는 것이 바람직하지 않습니다.

[형태 :]

다음 코드 예

이 동작을 나타낸다

<asp:RadioButton ID="rb1" runat="server" AutoPostBack="true" Text="Button1" OnCheckedChanged="rb_CheckedChanged" 
     GroupName="rbgroup" Checked="true" /> 
    <br /> 
    <asp:RadioButton ID="rb2" runat="server" AutoPostBack="true" Text="Button2" OnCheckedChanged="rb_CheckedChanged" 
     GroupName="rbgroup" /> 
    <br /> 
    <hr /> 
    <asp:Label ID="lbl1" runat="server">Button 1</asp:Label> 

[코드 숨김 :]

protected void rb_CheckedChanged(object sender, EventArgs e) 
{ 
    if (rb1.Checked == true) 
     lbl1.Text = "Button 1"; 
    else 
     lbl1.Text = "Button 2"; 
} 

답변

0

흠 -이 재미있다.

이것을 재현 할 수 있습니다. 그리고 놀랍게도 나는 소스 (브라우저 소스보기)에 올바른 라디오 버튼 (버튼 1)이 선택되었음을 보여줍니다. IE와 FF를 테스트 한 브라우저는 소스를 올바르게 렌더링하지 않았거나 라디오 버튼을 다시 그리지 않았거나 올바른 소스를 표시하지 않습니다.

이제 뒤로 버튼이있는 것이 약간 까다 롭습니다. 주로 그것에 대해 할 수있는 일이 많지 않기 때문에 ... HTTP는 상태가 유지되며 클라이언트의 뒤로 버튼은 웹 서버에서 "멀리"있습니다. 당신은 그것을 제어 할 수 없습니다.

비슷한 내용 주제에 관해서는 A Thorough Examination of "Disabling the Back Button"을 읽을 수 있습니다.

내가 말하고자하는 것은 브라우저가 소스가 말한 것과 다른 렌더링을하는 이유를 이해할 수는 없지만 여기에서 패배하고있는 싸움을 두려워한다는 것입니다.

내가 현재 생각할 수있는 유일한 방법은 사용자가 뒤로 버튼을 클릭 한 후 브라우저가 화면을 다시 그리게 만드는 "할 일"을 제공 할 수없는 스마트 자바 스크립트를 찾는 것입니다.

1

문제는 매우 간단합니다.

  1. 이 마크 업에서 당신은 페이지로드

  2. 당신이 사용해야합니다 .... 체크 = "false"를 또는 무엇이든 asp.net 동등한를 사용할 수있는 경우 (! IsPostBack을) {//그룹 값을 설정하십시오. }를 사용하여 페이지가 처음로드 될 때 라디오 버튼의 값을 데이터 소스 또는 기본값에서 설정합니다. 이후의 모든 시간은 제외됩니다.

    if(!IsPostBack) 
    { 
        rb1.Checked = false; 
        rb2.Checked = false; 
    
        //or alternatively set the value from server data 
    } 
    
    1. 브라우저가 이미 페이지를 캐시 한 뒤 버튼을 눌렀을의 경우 : 그래서 여기

    은 예입니다.마크 업 또는 코드에서 checked = "false"로 표시되지 않으므로 브라우저는 페이지의 상태를 캐시에서 가져온 것처럼로드합니다.

선택한 라디오 버튼을 변경하려면 미리 렌더링 및 렌더링하기 전에 PageLoad 이벤트가 실행되기 때문에 # 2를 사용하여 그룹 값을 설정하십시오.