2012-09-25 1 views
3

페이지를 표시 할 수 있지만 모든 컨트롤을 사용하지 못하게하고 싶습니다. 아이디어는 사용자가 표준 페이지를 볼 수 있지만 실제로 페이지와 상호 작용하지 않는 것입니다. 모든 UI 컨트롤 서버를 사용하지 않도록 설정하는 것은 간단하지만, 주된 관심사는 가짜 정보로 양식을 수동으로 게시하려는 "독창적 인"사용자입니다. 내 질문은 두 가지입니다.특정 비즈니스 로직에 대한 포스트 백 이벤트를 전역 적으로 취소하는 방법은 무엇입니까?

  1. 이벤트 유효성 검사를 통해 악의적 인 활동을 파악합니까?
  2. 이벤트 유효성 검사를 캐치하지 않는 경우, 다시 게시 이벤트를 던져
+0

SO 커뮤니티에서 많은 조사와 확인을받은 후 솔루션이 초기에 생각했던 것보다 더 복잡해 질 것으로 보입니다. 가장 쉬운 해결책은 "못된"포스트 백 소스에 사용자 정의 속성을 추가하고 포스트 백 동안 해당 속성을 쿼리하며 @dugas의 제안과 유사한 오류 페이지로 리디렉션하는 것입니다. –

답변

1

게시판을 전역 적으로 취소하는 가장 좋은 방법은이 Page 메서드를 재정의하는 것입니다. 당신은 당신이 OnLoad 이벤트 중에 DoNotProcessPostBack를 설정해야 어떤 논리를 수행 할 수 있습니다

Protected Overrides Sub RaisePostBackEvent(sourceControl As IPostBackEventHandler, eventArgument As String) 
    If DoNotProcessPostBack = False Then 
     MyBase.RaisePostBackEvent(sourceControl, eventArgument) 
    End If 
End Sub 

sourceControl는 제어 포스트 백을 수행하고 MyBase.RaisePostBackEvent은 기본적를위한 이벤트를 발생 무효화 스킵입니다.

2

이 두 가지 질문 중 하나를 주소 (예 : 버튼 클릭이 아니라 전체 수명주기) 전역하는 방법이있다 :

이벤트 유효성 검사에서이를 포착하지 못하면 전체 다시 게시 이벤트를 전역에서 버릴 수 있습니까 (예 : 전체 수명주기가 아니라 버튼 클릭)?

하나의 옵션은 ViewState에 값을 추가하는 것이고, 해당 값이 포스트 백에있는 경우 사용자를 오류 페이지로 리디렉션 할 수 있습니다. viewstate를 조작 한 사용자를 포착해야합니다. 이것은 포스트 백 이벤트 만 버리기를 바라지는 않지만, 포스트 백이 불가능하다고 생각한 페이지에서 포스트 백을받은 후 오류 페이지로 리다이렉트하는 것은 괜찮습니다.

if (ViewState["PageSetToReadOnly"] != null) 
{ 
    // Redirect to error page. 
} 

또 다른 옵션은 페이지의 PreInit 이벤트에서 다시 게시가 있는지 확인하는 것입니다, 만약 그렇다면, 무선화 이벤트 핸들러 :

if (Page.IsPostBack) 
{ 
    this.Button1.Click -= new EventHandler(Button1_Click); 
} 
+0

매우 큰 사업 일 것이기 때문에 각 이벤트 핸들러를 수동으로 변경하지 않아도되기를 정말로 바라고 있습니다. 나는 내가 국가를 추론하고 단순히 전 세계적으로 취소 할 수 있기를 바라고있다. 비즈니스 로직은 충분히 간단합니다. "단단한"방법이 있는지 확실하지 않습니다. –

+0

@J 토레스 - 또 다른 옵션을 추가했습니다 ... – dugas

+0

수정 사항은 사실 내 버튼의 클릭을 취소하고 싶을뿐입니다. 현재 뷰를 수정하기 위해 포스트 백을 발행하는 탭 컨트롤은 통과 할 수 있어야합니다. 이것에 관해서 드로잉 보드로 돌아 가야 할 수도 있습니다. –

2

아니, 당신은 정상 Postback 절차를 중지 할 수 없습니다 .

페이지를 사용 중지해야하는지 어떻게 결정합니까? Postback에 단추 처리기에서 동일한 체크를 사용하십시오. 그것이 사실이라면 어떤 정보도 저장하지 마십시오.

public void button1_Click(object sender, EventArgs e) 
{ 
    if(Page is disabled) 
    { 
     return 
    } 
    //Do normal save routine 
} 
+0

그건 내가 피하고 싶습니다.수십 - 수백 개의 웹 파트/컨트롤이 수정되어야합니다. 그들 모두는 수정을 할 수있는 공통 조상으로부터 상속받습니다. OnInit에서 보류중인 모든 제어 이벤트를 죽이는 무언가를 가질 수 있다면 이상적입니다. –

관련 문제