이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 17049|회답: 2

[ASP.NET] System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEven

[링크 복사]
게시됨 2015. 4. 21. 오후 3:56:12 | | |
같은 페이지에서 Gridview 제어를 사용하는 경우, 업데이트되는 이벤트에 서버가 응답할 수 없고, 오류 알람이 발생한 후 일부 정보를 쿼리하는 것으로 보이며, 해결책은 다음과 같이 요약됩니다: 클릭: 업데이트 이벤트는 응답할 수 없는데, 이는 postback 또는 callback 매개변수가 유효하지 않기 때문입니다. 구성 내에서 페이지에 <pages enableEventValidation="true"/> 또는 <%@ Page EnableEventValidation="true" %> 설정으로 이벤트 검증이 활성화됩니다. 보안상의 목적으로, 이 기능은 포스트백 또는 콜백 이벤트의 매개변수가 원래 렌더링한 서버 제어에서 유래했는지 검증합니다. 데이터가 유효하고 예상된다면, Clientscrip을 사용해 tManager.RegisterForEventValidation 메서드를 제거하여 포스트백 또는 콜백 데이터를 검증을 위해 등록하세요.
설명: 현재 웹 요청이 실행되는 동안 처리되지 않은 예외가 발생했습니다. 오류 발생 경로와 오류 발생 경로에 대한 스택 트레이스 정보를 확인하세요.
         예외 상세 정보: System.ArgumentException: 유효하지 않은 postback 또는 콜백 매개변수. 이벤트 검증은 < 페이지에서 enableEventValidation="true"/> 또는 <% @ Page EnableEventValidation="true" %> 설정에서 활성화됩니다. 보안상의 목적으로, 이 기능은 포스트백 또는 콜백 이벤트의 매개변수가 원래 렌더링한 서버 제어에서 유래했는지 검증합니다. 데이터가 유효하고 예상된다면, Clientscrip을 사용해 tManager.RegisterForEventValidation 메서드를 제거하여 포스트백 또는 콜백 데이터를 검증을 위해 등록하세요.

       오랫동안 살펴보니 문제를 찾지 못했고, 코드를 다시 확인해도 맞았으며, 페이지 내 모든 컨트롤의 ID와 속성을 확인했지만 여전히 문제를 찾지 못했습니다. 나중에 알게 된 사실은 이렇습니다:

발생 조건:
1. 화면에 숨겨진 조작 장치가 있습니다.
2. 다중 Gridview 바인딩.

3. 여러 형태로 중첩됨.
발생 원인:
. .NET은 페이지 내 출력 요소를 바탕으로 최종 페이지에서 __EVENTVALIDATION 숨겨진 필드를 생성합니다. 간단한 테스트가 이루어졌다. <asp: button id="btnSubmit" runat="server" text="Submit" 툴팁="Submit" /> 생성하고 해당 Click 이벤트 핸들러를 생성합니다. 프로그램을 실행하고 사건에 올바르게 대응하세요. 그 다음 btnSubmit.Visable=false를 설정하고, 페이지에 수동으로 <input type="submit" name="btnSubmit" value="Submit" />을 추가하세요. 프로그램을 실행하면 EnableEventValidation 내용에 예외가 나타납니다. EnableEventValidation="false" <@Page 설정> 이벤트에 올바르게 반응하도록 프로그램을 다시 실행하세요. 두 __EVENTVALIDATION의 내용을 전후로 관찰하면 서로 다르다는 것을 알 수 있습니다. 예외가 발생한 경우, btnSubmit이 출력에 포함되지 않았다고 볼 수 있지만, 백그라운드에 제출되면 해당 콘텐츠가 있어 일관성이 없으므로 이벤트 검증이 활성화된 경우에 해당합니다. .NET은 예외를 던집니다.

해결책 1:
Page_Load(object sender, EventArgs e)
{
    만약 (! 페이지.IsPostBack)
    {
        데이터 결속;
    }
}
해결책 2:
<pages enableEventValidation="false"/>

1. 페이지의 <%@ Language ="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>에 EnableEventValidation="false"를 추가합니다. (우선)

2. web.config를 통해 진행하세요
<system.web>
<pages enableEventValidation="false"/>

3. 폼 중첩(Form nesting)입니다. 페이지는 하나의 폼만 가질 수 있으며, 코드를 꼼꼼히 확인하면 해결할 수 있습니다.

4. 페이지에 DropDownList 또는 ListBox 같은 제어 장치가 포함된 경우, 다음과 같은 이유로 발생할 수 있습니다:

4.1 드롭다운 메뉴에서 ajax를 사용하는 것은 주로 주 및 도시 연결 메뉴에서 찾을 수 있는데, 이는 드롭다운 메뉴의 초기 항목 값이 aspx 페이지에 할당되어 이벤트가 게시될 때 오류가 발생하고, 드롭다운 메뉴의 초기 항목 값이 삭제된 후 아이템 아이템이 결합된 이벤트에 추가되기 때문일 수 있습니다.
4.2 그 이유는 DropDownList 컨트롤의 ListItem의 Value 속성에 한자가 포함되어 있기 때문입니다. 그냥 값을 영어나 숫자로 바꾸면 됩니다. web.config에 다음과 같은 문장을 추가하는 것이 가장 좋습니다:
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN"/> POSTBACK이 UTF-8로 인코딩되지 않기 때문에, JAVAscrip에서 t를 제거하는 것은 문제가 될 수 있습니다.
requestEncoding="utf-8"을 변경하되, responseEncoding="utf-8"은 변경하지 않습니다

5. 이벤트 검증을 위해 등록하기
원칙은 asp.net 이 포스트백 값을 기록하게 하는 것입니다.
RegisterForEventValidation은 렌더 시 호출되어야 합니다.






이전의:톈허-2는 내부자 매수 금지: 미국은 중국의 슈퍼컴퓨팅 파워를 질투한다
다음:전문성 "경력 계획 템플릿"
 집주인| 게시됨 2015. 4. 22. 오전 10:36:18 |
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test1.aspx.cs" Inherits="WebApplication1.test1" enableEventValidation="false" %>
코드 복사


게시됨 2015. 4. 22. 오전 10:40:46 |
위에서 말한 EnableEventValidation="true"가 로컬에서 검증하고 CPU를 소모한다는 점에 동의합니다; EnableEventValidation="false"는 서버 검증을 반환하고 페이지를 다시 불러옵니다.
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com