문제

ClientScriptManager.registerHiddenField와 함께 추가하는 숨겨진 필드와 값을 등록하기 위해 ClientScriptManager.registerforeventValidation을 사용하려고합니다. 렌더 이벤트 중에이 작업을 수행합니다. 오류가 발생하지 않지만 ASP.NET 2.0은 필드를 검증하는 것으로 보이지 않습니다. Firefox 및 FireBug를 사용하여 값을 변경하거나 전체 필드 Clientside를 삭제할 수 있으며 ASP.NET은 오류가 발생하지 않습니다.

사용자 정의 페이지 클래스의 샘플 코드 :

protected override void Render(HtmlTextWriter writer)
{
    ClientScript.RegisterHiddenField("stuff", "things");
    ClientScript.RegisterForEventValidation("stuff", "things");
    base.Render(writer);
}

숨겨진 필드가 페이지에 추가되지만 ASP.NET은 PostBack의 필드 또는 값을 검증하지 않습니다. 내가 무엇을 놓치고 있습니까?

도움이 되었습니까?

해결책

나는 당신이하려는 일을 이해하지만 이벤트 검증 API를 사용하는 것이 실제로 적절하지 않습니다. 클라이언트가 제기 한 Postback 또는 Callback 이벤트가 대상 서버 컨트롤에 적합한 것으로 보이기 때문에 클릭하십시오. 올바른 버튼으로 처리하거나 드롭 다운 목록의 변경 이벤트가 원래 서버에 '알려지지 않은'값이 아닌지 확인합니다.

코드에서는 클라이언트에 직접 숨겨진 필드를 생성하므로 서버가 포스트 백에서 참조 할 제어가 없습니다. 서버 페이지에서 숨겨진 필드 컨트롤을 사용하더라도 컨트롤이 Postback 이벤트를 생성하지 않기 때문에 필드 값을 검증 할 수 없습니다 (사용자가 상호 작용할 수있는 방법이 없으므로 아니요. 서버가 검증 할 수있는 이벤트).

가장 간단한 솔루션은 ViewState를 사용하여 필드 값을 저장 한 다음 PostBack에서 필드의 게시 된 값이 ViewState에 저장된 값과 동일했는지 확인하는 것입니다. ViewState는 기본적으로 암호화되므로 클라이언트에서 변경하지 않아야 할 데이터를 저장할 수있는 안전한 장소입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top