2009-11-11 2 views
2

두 개의 드롭 다운 목록이 있습니다.asp : DropDownList - JavaScript/jQuery를 통해 옵션을 추가 할 때 잘못된 포스트 백 또는 콜백 인수

<asp:DropDownList ID="Field_Type" runat="server" /> 
<asp:DropDownList ID="Field_SubType" runat="server" /> 

Field_Type는 데이터베이스에서 채워지는 형식 목록과 함께 데이터 바인딩됩니다. Field_SubType가 변경되면 jQuery/AJAX를 통해 Field_SubType가 설정됩니다. 그런 다음 $("#<%# Field_SubType.ClientID %>").append("<option value=\"1\">Test</option>");을 사용하여 옵션을 추가합니다. 이것은 예상대로 작동합니다 (새로운 하위 유형이 추가 된 것을 볼 수 있습니다).

그러나 추가 된 옵션을 선택한 후 다시 게시 할 때 오류가 발생합니다.

Invalid postback or callback argument. Event validation is enabled using in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

이 문제의 원인은 무엇이고 어떻게 처리 할 수 ​​있습니까? 내가 가지고있는 몇 가지 아이디어 :

    <select> 일반 <select>을 사용하고 Request.Form를 사용하십시오. 사용자 컨트롤에 여러 번 사용하면 문제가 될 수 있습니다.
  1. Field_SubType에 모든 하위 유형을 채우고 Field_Type의 하위 유형이 아니므로 필요한 것보다 많은 데이터가로드되어 페이지로드 시간에 추가됩니다.

기타 옵션은 무엇입니까?

답변

3

기본적으로 ASP.NET은 각 양식 필드의 제출 된 값이 원래 페이지에 보낸 값인지 확인합니다. 여기에 예제가 있습니다 :

우리는 ASP.NET 코드에서 ASP.NET을 추가했기 때문에 A, B, C 옵션이있는 DropDownList를가집니다. JavaScript에서는 네 번째 옵션 인 D를 추가합니다. 클라이언트 측에서 ASP.NET이 발생했기 때문에 ASP.NET은이를 알지 못합니다. 페이지를 제출하기 위해 D를 선택하면 ASP.NET은 "D가 내가 선택한 선택 사항 중 하나가 아니라 요청시 게시물 값을 악의적으로 조작하려고 할 수 있습니다."라고 표시합니다. 바로 요청을 중단함으로써 시스템과 개발자를 보호합니다. 당신이 경우

<system.web> 
    <pages enableEventValidation="false"/> 
</system.web> 

이벤트 유효성 검사는 항상 필요가 없습니다 : 오류 메시지에서 알 수 있듯이, 해당 페이지에, 또는 Web.config의 수준에서 모든 페이지에 대해 -

당신은 페이지 유효성 검사를 해제 할 수 있습니다 양식에서 제출 된 값을 기반으로 명시 적 조치를 절대 취하지 않는 방식으로 코드를 작성하십시오 (어쨌든 결코 수행해서는 안됨). 사용자가 예기치 않게 또는 범위를 벗어난 값을 무시하거나 아무 것도하지 않아야합니다. 그런 식으로 코드를 작성하는 동안 이벤트 유효성 검사를 안전하게 해제 할 수 있습니다.

+0

렉스,이 스크립트 삽입에 개방 전체 사이트를 떠나지 않을 것입니다 :

추가 트림이 문제를 해결? 컨트롤을 사용하는 페이지에서이 기능을 활성화하고 페이지의 다른 입력에 대해 추가 유효성 검사를 제공합니다. –

+1

@ 마크 사용자가 마크 업을 제출하는 것을 막기 위해 의존한다고 가정하면 그렇게 할 수 있습니다. 하지만 누가 그것을합니까;) –

+0

@ 짐 XSS를 방지하기 위해 페이지 확인에만 의존하는 경우, 당신은 완전히 다른 문제가 있습니다.최신 버전의 AntiXSS 라이브러리를 사용하여 보안 수준을 높이고 CAT.NET을 실행하여 가능한 취약점을 발견하십시오. –

2

트리밍되지 않은 텍스트가있는 드롭 다운 목록을로드 할 때도 발생할 수 있습니다. XML에서 드롭 다운을로드하고 개행 문자 및 공백을 항목에 배치했습니다. 그러나 드롭 다운이 나타 났을 때 모든 것이 잘 보였다. 드롭 다운을 변경하면 오류가 발생했습니다.

items.Add(item2.Value.Trim()); 
관련 문제