asp. net 새로 고침 방지 시 중복 제출

6663 단어
얼마 전에 리 셋 을 사용 하지 않 아야 하 는 수요 에 부 딪 혔 습 니 다. f5 단 추 는 말 하지 않 았 습 니 다. 간단 한 js 는 사용 하지 않 을 수 있 지만 도구 막대 에 있 는 리 셋 단 추 는 바보 같이 할 수 없 었 습 니 다.
간단하게 새로 고침 할 때 화면 을 다시 불 러 오 면 window. location. href = "url" 을 통 해 쉽게 이 루어 질 수 있 지만 수 요 는 새로 고침 할 때 아무것도 하지 않 고 화면의 상 태 를 유지 하 라 는 것 이 므 로 복잡 해 집 니 다.
asp. net 에서 요청 이 재 요청 인지 새로 고침 단 추 를 통 해 재 요청 하 는 것 이 편리 하지 않 습 니 다. 이 효 과 를 실현 하기 위해 여러 가지 방법 을 시도 해 보 았 습 니 다. 다음 두 가지 예 를 들 어.
1.
private bool pageRefreshed = false; //        
private bool refreshState = false;  //ViewState      

    그리고 Page 의 LoadView State 와 SaveView State 방법 을 다시 씁 니 다.
protected override void LoadViewState(object savedState)
{
    object[] states = (object[])savedState;
    base.LoadViewState(states[0]);
    refreshState = (bool)states[1];
    if(Session["__PAGE_REFRESHED"] == null)
        pageRefreshed = false;
    else
        pageRefreshed = refreshState != (bool)Session["__PAGE_REFRESHED"];
}

protected override object SaveViewState()
{
    Session["__PAGE_REFRESHED"] = !refreshState;
    object[] states = new object[2];
    states[0] = base.SaveViewState();
    states[1] = !refreshState;
    return states;
}
private void Button1_Click(object sender, EventArgs e)
{
 if (pageRefreshed )
            {
               label.Text="this is refreshed function";
            }
else
{
  label.Text="this is new request function";
}
}

이런 방법 은 비록 실현 할 수 있 지만, 어떤 청구 하에 서 는 적응 하지 못 한다.화면 에 텍스트 상자 와 단추 식 이 동시에 존재 한다 면 단추 의 autopostback = "True" 를 설정 할 때 텍스트 상자 의 값 을 수정 하고 단 추 를 직접 클릭 합 니 다 (텍스트 상자 에 초점 을 잃 지 않 았 을 때 단 추 를 직접 클릭 합 니 다). 이때 의 실행 순 서 는 textchanged → textchanged → buttonclick 입 니 다. 첫 번 째 textchanged 때 상 태 를 true 로 바 꾸 었 습 니 다.버튼 을 실행 할 수 없습니다.
2. codeproject 에서 다른 해결 방법 을 찾 았 습 니 다.http://www.codeproject.com/Articles/18841/Refresh-Module
이 방식 은 브 라 우 저의 리 셋 단 추 를 통 해 요청 한 것 인지 정확하게 판단 할 수 있 으 며 사용 하기 도 매우 간단 합 니 다!
1. dll 참조, 프로필 수정
프로필 에 modules 추가
<system.web>
    <httpModules>
        <add name="RefreshModule" 
            type="RefreshModule.Module, RefreshModule"/>
    httpModules>
system.web> 

PS: wbapplication 의 경우 system. webServer 의 modules 노드 에 modules 를 추가 해 야 합 니 다.
2. 새로 고침 시 행동 정의
[Refresh()]
public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
         if(IsPostBack && !RefereshHelper.IsPageRefreshed)
        {
            // do some work with the submitted date
        }
        else
        {
            
           // do some work when the page is loaded with the GET method
        }
    }
}
RefereshHelper.IsPageRefreshed

PS:codeproject ,

다른 방식 은 일일이 열거 하지 않 고 열거 한 두 번 째 방식 은 간단 하고 사용 하기 쉽다 고 할 수 있 으 며 모든 실현 은 이미 우 리 를 위해 포장 되 었 으 니 간단 한 호출 만 필요 하 다.
 
다음으로 전송:https://www.cnblogs.com/qiangwei/archive/2013/01/28/disabledRefreshButton.html

좋은 웹페이지 즐겨찾기