잘못된 포스트 백 또는 콜백 인수 '<pages enableEventValidation =“true”/>'를 사용하여 이벤트 유효성 검증이 사용 가능합니다.


238

클라이언트 쪽에서 페이지를 다시 게시하면 다음 오류가 발생합니다. 클라이언트 쪽에서 asp : ListBox를 수정하는 JavaScript 코드가 있습니다.

이 문제를 어떻게 해결합니까?

아래 오류 정보 :

Server Error in '/XXX' Application.

--------------------------------------------------------------------------------
Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> 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.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> 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.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[ArgumentException: Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> 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.]
   System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +2132728
   System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
   System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +274
   System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
   System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +353
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1194

--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433

page_load 이벤트에서 데이터 바인드를 수행하지 마십시오.
Paul Zahra

답변:


171

문제는 ASP.NET이이 추가 또는 제거 된 목록 항목에 대해 알 수 없다는 것입니다. 여러 가지 옵션이 있습니다 (아래에 나열 됨).

  • 이벤트 유효성 검사 비활성화
  • ASP.NET Ajax UpdatePanel을 사용하십시오. (목록 상자를 추가하거나 제거하면 업데이트 패널에 목록 상자를 넣고 업데이트를 트리거하십시오. 이런 방식으로 viewstate 및 관련 필드는 업데이트를 받고 이벤트 유효성 검증은 통과합니다.)
  • 클라이언트 측을 잊고 클래식 포스트 백을 사용하고 서버 측 목록 항목을 추가하거나 제거하십시오.

이게 도움이 되길 바란다.


또 하나의 옵션 : IPostBackEventHandler 및 전화 JS __doPostBack 구현 ( '<% = UniqueId.ToString을 () %>'인수)
gdbdable

위의 제안에 따라 드롭 다운을 일반 ASP.NET asp : UpdatePanel에 넣고 드롭 다운을 코드로로드 한 다음 upNewRecord.Update ();
Ricardo Appleton

183

Page_Load 이벤트에 코드가 있습니까? 그렇다면 다음을 추가하면 도움이 될 것입니다.

if (!Page.IsPostBack)
{ //do something }

이 오류는 명령을 클릭하고 Page_load가 다시 실행될 때 발생합니다. 정상적인 수명주기는 Page_Load-> Command-> Page_Load (다시)-> ItemItem 이벤트 처리입니다.


7
매우 감사합니다, 그것은 내 경우의 속임수였습니다! 페이지로드에 드롭 다운 목록을 다시로드 했으므로 프레임 워크는 ddl의 항목 (새로운 항목) 및 더 이상 존재하지 않는 클릭 한 항목에 대한 제어를 잃었습니다.
Michel

OP와 동일한 오류가 발생했습니다 ... 내 양식에서 마법사를 사용하고 있었고 페이지로드에서 0 단계를 호출했습니다. 그것을 제거하고 문제가 사라졌습니다. 감사합니다
22 분 48 초

덕분에이 답변을 많이 .... 같은 문제를했다 그리고 난 그냥 포스트 백을 무시 잊고 있었던 밝혀졌다 때 내 그리드에 ... 나 저장 데이터를로드 많은 시간
곤경

10
어이! MVC에서 웹 양식으로 돌아 오는 것은 고통입니다. 정답입니다
Vishnoo Rath

2
이 작업을 수행했지만 포스트 백이 아닌 경우 page_load 이벤트에서 실행 해야하는 코드가 있기 때문에 작동하지 않으므로 여전히 동일한 오류가 발생합니다. 리피터에 대한 viewstate를 비활성화하면 문제가 해결되었습니다.
Bryan

40

DataGrid에 경험이 있습니다. 열 중 하나는 "선택"버튼이었습니다. 행의 "선택"버튼을 클릭했을 때이 오류 메시지가 표시되었습니다.

"잘못된 포스트 백 또는 콜백 인수입니다. 페이지에서 구성 또는 <% @ Page EnableEventValidation ="true "%>에서 이벤트 유효성 검사를 사용하도록 설정했습니다. 보안을 위해이 기능은 포스트 백 또는 콜백 이벤트에 대한 인수가 서버 컨트롤에서 시작되었는지 확인합니다. 데이터가 유효하고 예상되는 경우 ClientScriptManager.RegisterForEventValidation 메소드를 사용하여 유효성 검증을 위해 포스트 백 또는 콜백 데이터를 등록하십시오. "

몇 가지 코드를 변경하고 마침내 성공했습니다. 내 경험 경로 :

1) 페이지 속성을로 변경했습니다 EnableEventValidation="false". 그러나 작동하지 않았습니다. (보안상의 이유로 위험 할뿐만 아니라 이벤트 핸들러가 호출되지 않았습니다.void Grid_SelectedIndexChanged(object sender, EventArgs e)

2) ClientScript.RegisterForEventValidation렌더 방법으로 구현 했습니다. 그러나 작동하지 않았습니다.

protected override void Render(HtmlTextWriter writer)
{
    foreach (DataGridItem item in this.Grid.Items)
    {
        Page.ClientScript.RegisterForEventValidation(item.UniqueID);
        foreach (TableCell cell in (item as TableRow).Cells)
        {
            Page.ClientScript.RegisterForEventValidation(cell.UniqueID);
            foreach (System.Web.UI.Control control in cell.Controls)
            {
                if (control is Button)
                    Page.ClientScript.RegisterForEventValidation(control.UniqueID);
            }
        }
    }
}

3) 그리드 열의 버튼 유형을에서 (으)로 변경 PushButton했습니다 LinkButton. 효과가 있었다! ( "ButtonType ="LinkButton "). 다른 경우에는"LinkButton "과 같은 다른 컨트롤로 버튼을 변경할 수 있다면 제대로 작동한다고 생각합니다.


1
내 솔루션은 데이터 그리드 내에서 중첩 버튼을 포기하는 것이 었습니다. MS는 또 다시 실패합니다.
Jacobs Data Solutions

귀하의 솔루션도 나를 위해 일했습니다. 감사합니다. 그러나 같은 프로그램에서 Button일할 때 왜 작동하지 않는지 알고 싶습니다 linkButton. 그렇다면 항상 사용해야 linkButton합니까? 어떻게 더 유연하게 만들 수 있습니까?
Frank Myat Thu

8
당신의 버튼 UseSubmitBehavior에 추가 시도 = "거짓" stackoverflow.com/questions/2968525/...
JJschk

Awesomeeeeeee :) .. 당신은 경험에 의해서만 이것을 배울 수 있습니다 .. 당신은 실제 scenerio tat 쇼 경험이 최고의 교사임을 증명했습니다 .. 훌륭한 ans와 설명!
saun4frsh

Render의 재정의에서 base.Render (writer); 결국 ... 그렇지 않으면 작동하지 않습니다!
Paul Zahra

28

이벤트 유효성 검사를 비활성화하지 말고 실제로 2 또는 3을 수행하려고합니다.

asp : listbox 클라이언트 측에 항목을 추가 할 때 두 가지 주요 문제점이 있습니다.

  • 첫 번째는 이벤트 유효성 검사를 방해한다는 것입니다. 서버로 돌아온 것은 보낸 것이 아닙니다.

  • 두 번째는 이벤트 유효성 검사를 비활성화하더라도 페이지가 다시 게시되면 목록 상자의 항목이 viewstate에서 다시 작성되므로 클라이언트에서 변경 한 내용이 손실됩니다. 그 이유는 asp.net은 클라이언트에서 목록 상자의 내용이 수정 될 것으로 예상하지 않고 선택 만 할 것으로 예상하므로 변경 한 내용을 모두 버립니다.

가장 좋은 방법은 권장대로 업데이트 패널을 사용하는 것입니다. 이 클라이언트 쪽을 실제로 수행해야하는 또 다른 옵션은. <select>대신 일반을 사용하고 <asp:ListBox>항목 목록을 숨겨진 필드에 유지하는 것입니다. 페이지가 클라이언트에서 렌더링되면 텍스트 필드 내용의 분할에서 페이지를 채울 수 있습니다.

그런 다음 게시 할 준비가되면 수정 된에서 숨겨진 필드의 내용을 다시 채 웁니다 <select>. 물론 서버에서 다시 선택했기 때문에 선택 항목이 비어 있으므로 서버에서 다시 분할하고 항목으로 무언가를 수행해야합니다.

대체로 권장하지 않는 꽤 번거로운 솔루션이지만 listBox의 클라이언트 측 수정을 실제로 수행 해야하는 경우 작동합니다. 그러나이 경로로 가기 전에 updatePanel을 살펴 보는 것이 좋습니다.


3
c, 선택한 항목을 숨겨진 필드에 유지할 필요가 없습니다. 선택 상자를 runat = "server"로 만들면 Request.Form [ selectid .UnqiueID] 에서 게시 된 값을 읽을 수 있습니다 . 그리고 여러 개를 선택하면 브라우저가 해당 값을 csv로 게시합니다. 서버가 모르는 클라이언트에서 itrmlist를 수정했기 때문에 컨트롤의 항목 및 선택된 인덱스 속성이 서버에서 잘못 될 수 있습니다.
Michael

마이클, 그게 효과가 있었어 "multiple = true"를 추가하면 1의 값만 제공합니다. 감사합니다
사미르 Alibhai

1
줄 바꿈 문자가있는 드롭 다운 목록에 대해 동일한 문제가 있습니다. 선택으로 변경하면 완벽하게 작동했습니다. 감사!
thchaver

나는 old를 사용 <select>하여 문제를 해결했다. 클라이언트 측 ajax 데이터로드와 비교할 때 Updatepanel이 데이터를로드하는 데 왜 많은 시간이 걸리는지 알려주십시오.?
Pranesh Janarthanan

17

EnableEventValidation이 설정된 웹 사이트에 Repeater 컨트롤이있는 웹 페이지가 있기 때문에 Repeater와 동일한 문제가 발생했습니다. 좋지 않았다. 잘못된 포스트 백 관련 예외가 발생했습니다.

나를 위해 일한 것은 Repeater에 EnableViewState = "false"를 설정하는 것이 었습니다. 장점은 웹 사이트 나 웹 페이지에 대해 이벤트 유효성 검사를 해제하는 것만 큼 사용하기가 더 간단하지만 범위가 이벤트 유효성 검사를 해제하는 것보다 훨씬 적다는 것입니다.


3
레거시 웹 컨트롤 에서이 정확한 문제가있었습니다. 우리의 웹 플랫폼 / CMS (sitecore)는 이벤트 유효성 검사를 켜기 위해 큰 업데이트를 얻었습니다 (이전에는 꺼져있었습니다! 아야!). 리피터 컨트롤은 웹 갤러리에 이미지를 표시하고 (이미지를 재정렬하는 버튼이 있음)이 버튼의 포스트 백시 예외가 발생합니다. 제안한대로 EnableViewState = "false"를 사용하여 리피터에서보기 상태를 비활성화하고 작동했습니다. 다른 사람들이 발견했듯이 Render () 재정의 및 ClientScriptManager.RegisterForEventValidation () 사용이 작동하지 않았습니다. 감사합니다!
xan

@xan과 마찬가지로 Sitecore도 사용하며 이것이 바로 내가 필요한 것입니다.
wilsjd

이것은 또한 나를 위해 일했습니다. AJAX 업데이트 패널도 효과가 있었지만이 경우에는 필요하지 않은 오버 헤드가 있었으므로 Umar Farooq Khawaja에게 감사드립니다.
Bryan

17

위의 어느 것도 나를 위해 일하지 않았습니다. 더 파고 난 후에 나는 페이지에 적용된 2 개의 양식을 간과하여 문제를 일으킨다는 것을 깨달았습니다.

<body>
<form id="form1" runat="server">
<div>
        <form action="#" method="post" class="form" role="form">
        <div>
        ...
        <asp:Button ID="submitButton" runat="server"
        </div>
</div>
</body>

최근 ASP.NET은 iframe 문서 자체에 중첩 된 프레임의 양식 태그를 포함하는 양식 태그 내의 iframe을 고려하기 시작했습니다. 이 오류를 피하기 위해 iframe을 양식 태그 밖으로 이동해야했습니다.


12

클라이언트에서 JavaScript를 사용하여 ListBox를 수정할 때도 동일한 문제가 발생했습니다. 페이지가 렌더링 될 때 존재하지 않은 클라이언트에서 ListBox에 새 항목을 추가 할 때 발생합니다.

내가 찾은 수정은 클라이언트에서 추가 할 수있는 모든 유효한 항목을 이벤트 유효성 검사 시스템에 알리는 것입니다. JavaScript가 목록 상자에 추가 할 수있는 각 값에 대해 Page.Render를 재정의하고 Page.ClientScript.RegisterForEventValidation을 호출하면됩니다.

protected override void Render(HtmlTextWriter writer)
{
    foreach (string val in allPossibleListBoxValues)
    {
        Page.ClientScript.RegisterForEventValidation(myListBox.UniqueID, val);
    }
    base.Render(writer);
}

목록 상자에 대해 잠재적으로 유효한 값이 많을 경우 다소 어려움이 될 수 있습니다. 필자의 경우 두 ListBox 사이에서 항목을 이동했습니다. 하나는 가능한 모든 값을 가지고 있고 다른 하나는 처음에는 비어 있지만 사용자가 버튼을 클릭하면 JavaScript의 첫 번째 값의 하위 집합으로 채워집니다. 이 경우 첫 번째 ListBox의 항목을 반복하고 두 번째 목록 상자에 각 항목을 등록하면됩니다.

protected override void Render(HtmlTextWriter writer)
{
    foreach (ListItem i in listBoxAll.Items)
    {
        Page.ClientScript.RegisterForEventValidation(listBoxSelected.UniqueID, i.Value);
    }
    base.Render(writer);
}

9

여기에 언급되지 않은 다른 방법은 ListBox를 서브 클래스 화하는 것입니다.

즉.

public class ListBoxNoEventValidation : ListBox 
{
}

ClientEventValidation은 서브 클래스 인 경우 System.Web.UI.SupportsEventValidation 속성을 해제합니다. 명시 적으로 다시 추가하지 않으면 유효성 검증 루틴을 호출하지 않습니다. 그것은 모든 컨트롤과 함께 작동하며 컨트롤 기반으로 컨트롤에서 "비활성화"할 수있는 유일한 방법입니다 (예 : 페이지 수준이 아님).



1
가장 좋은 방법은 이것을하는 것입니다. 우리는 페이지 수준이 아닌 제어 수준에서 수정해야하며 +1과 관련된 모든 제어의 보안을 위험에 빠뜨리고 해당 링크에 대한 @PavelHodek에게 감사드립니다.
James Poulose

안타깝게도이 작업을 수행하면 페이지를 다시 게시 할 때 클라이언트에 추가 된 목록 항목이 선택된 경우 인식되지 않는 것 같습니다.
Jonathan Wood

9

.aspx 페이지에서 이와 같은 것을 시도하십시오.

더하다

EnableEventValidation = "false"

당신은 질문을 자유롭게 느끼십시오!


오류가 발생하는 것을 막기 위해 프레임 워크에서 빌트인 유효성 검사 기능을 비활성화하면이 경우 가장 적합한 솔루션이라고 주장합니다.
Jviaches

8

클라이언트 측 스크립트를 통해 DropdownList를 채우면 양식을 서버에 다시 제출하기 전에 목록을 지우십시오. 그러면 ASP.NET은 불평하지 않고 보안은 계속 유지됩니다.

DDL에서 선택한 데이터를 가져 오려면 "OnChange"이벤트를 DDL에 첨부하여 숨겨진 입력 또는 Style = "display : none;"을 사용하여 텍스트 상자에 값을 수집 할 수 있습니다.


+1 쉬운 구현. 가장 깨끗하지는 않지만 충분히 쉬울 수 있습니다.
nutsch

7

3 : 그리드 열의 버튼 유형을 "PushButton"에서 "LinkButton"으로 변경했습니다. 효과가 있었다! ( "ButtonType ="LinkButton ") 다른 경우에는"LinkButton "과 같은 다른 컨트롤로 버튼을 변경할 수 있다면 제대로 작동한다고 생각합니다.

나는 당신에게 투표 할 수 있기를 바랍니다 .Amir (내 담당자가 너무 낮습니다.) 나는이 문제가 있었고 이것을 그리드 뷰에서 챔피언처럼 일했습니다. 조금만 제쳐두고 유효한 코드는 다음과 같습니다. ButtonType = "Link"

'수정'을 클릭하면 수정 내용이 '업데이트'및 '취소'로 변경된 다음 제출시 '수정'으로 다시 변경되기 때문입니다. 그리고 이러한 변속 컨트롤은 .net을 불안하게 만듭니다.


이 문제의 핵심은 asp.net eventvalidation 모델과 포스트 백을 수행 할 때 클라이언트가 "페이지"를 수정했는지 여부입니다. '..... 이러한 변속 컨트롤로 인해 .net이 불안해집니다'라는 것은 무엇을 의미합니까?
줄리어스 A

7

(1) EnableEventValidation = "false"................... 작동하지 않습니다.

(2) ClientScript.RegisterForEventValidation .... 그것은 나를 위해 작동하지 않습니다.

해결책 1 :

GridView에서 Button / ImageButton을 LinkButton으로 변경하십시오. 효과가있다. (그러나 나는 ImageButton을 좋아한다)

연구 : Button / ImageButton 및 LinkButton은 다른 방법으로 포스트 백

원본 기사 :

http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx

해결책 2 :

OnInit ()에서 Button / ImageButton에 고유 ID를 설정하려면 다음과 같은 코드를 입력하십시오.

protected override void OnInit(EventArgs e) {
  foreach (GridViewRow grdRw in gvEvent.Rows) {

  Button deleteButton = (Button)grdRw.Cells[2].Controls[1];

  deleteButton.ID = "btnDelete_" + grdRw.RowIndex.ToString();           
  }
}

원본 기사 :

http://www.c-sharpcorner.com/Forums/Thread/35301/


6

중첩 된 그리드보기를 구현했으며 같은 문제에 직면했습니다. 이미지 버튼 대신 LinkButton을 사용했습니다.

내가 이와 같은 열을 갖기 전에 :

<asp:TemplateField ItemStyle-Width="9">
  <ItemTemplate>
 <asp:ImageButton ID="ImgBtn" ImageUrl="Include/images/gridplus.gif" CommandName="Expand"
                        runat="server" />
  </ItemTemplate>
</asp:TemplateField>

나는 이렇게 교체했다.

<asp:TemplateField>
<ItemTemplate>
     <asp:LinkButton  CommandName="Expand" ID="lnkBtn"  runat="server" ><asp:Image  ID="Img"  runat="server" ImageUrl="~/Images/app/plus.gif" /></asp:LinkButton>
      </ItemTemplate>
</asp:TemplateField> 

5

비슷한 문제가 있었지만 ASP.Net 1.1을 사용하거나 javascript를 통해 컨트롤을 업데이트하지 않았습니다. 내 문제는 Firefox에서만 발생했으며 IE (!)에서는 발생하지 않았습니다.

PreRender 이벤트의 DropDownList에 옵션을 다음과 같이 추가했습니다.

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string[] opcoes = HF.value.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

내 "HF"(hiddenfield)에는 다음과 같이 개행 문자로 구분 된 옵션이 있습니다.

HF.value = "option 1\n\roption 2\n\roption 3";

문제는 DropDown을 나타내는 "select"의 옵션에서 HTML 페이지가 손상되었다는 것입니다.

그래서 한 줄을 추가하여 문제를 해결했습니다.

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string dados = HF.Value.Replace("\r", "");
string[] opcoes = dados.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

이것이 누군가를 돕기를 바랍니다.


4

당신 UseSubmitBehavior="True"UseSubmitBehavior="False"당신의 문제로 변경 하면 해결됩니다

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />

그것은 나를 위해 작동하지 않았다. 그래도 이미지 버튼을 사용하고 리피터의 테이블에 있으므로 동일한 상황이 아닙니다. 리피터의 viewstate를 비활성화하면 나에게 도움이되었습니다.
Bryan

3

나는 똑같은 문제를 겪었다.

방금 조건을 추가하고 if(!IsPostBack)정상적으로 작동합니다 :)


3

이 오류는 포스트 백없이 표시됩니다

코드 추가 :

If(!IsPostBack){

 //do something

}

2

이 경우 그리드의 RowDataBound에있는 버튼에 id를 추가하십시오. 문제를 해결할 것입니다.


2

이 문제에 대한 간단한 해결책은 페이지로드시 IsPostBack 확인 을 사용하는 것 입니다. 이 문제를 해결할 것입니다.


2

Ajax UpdatePanelAjax 포스트 백 오버 헤드를 무시하고 가장 쉬운 방법 이라고 생각합니다 .


2

나는 이것이 오래된 게시물이라는 것을 알고 있습니다. 응용 프로그램을 호출한다고 가정하면 다음과 같은 아이디어가 있습니다.

  1. 페이지에서 ICallbackEventHandler를 구현하십시오.
  2. ClientScriptManager.GetCallbackEventReference를 호출하여 서버 측 코드를 호출하십시오.
  3. 오류 메시지에 표시된대로 ClientScriptManager를 호출 할 수 있습니다 .RegisterForEventValidation

전체 제어가 필요하지 않은 경우 업데이트 패널을 사용하면됩니다.


2

일반 ASPX 페이지를 콘텐츠 페이지로 변환 할 때도 이와 동일한 문제가 발생했습니다.

이 문제가있는 페이지 </form>에는 콘텐츠 섹션 중 하나에 태그가 있으므로 런타임에 두 개의 양식 끝 태그가 렌더링되어이 문제가 발생했습니다. 페이지에서 추가 양식 끝 태그를 제거하면이 문제가 해결되었습니다.


감사 <form>합니다. 코드에 추가 필드가있는 것으로 나타났습니다 .
Eric Kigathi

2

! ispostback 내부의 pageload에서 gridview를 바인딩하지 않고 gridview를 바인딩하지 않으면 gridview에서 편집 및 삭제 행을 클릭하면이 오류가 발생합니다.

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        bindGridview();
        }

1

4 분 전에 같은 오류가 발생했습니다. 그리고 나는 당신처럼 30 분 동안 연구했습니다. 모든 포럼에서 그들은 일반적으로 "add page enableEvent .. = false or true"라고 말합니다. 제안 된 솔루션은 문제를 발견 할 때까지 문제를 해결하지 못했습니다. 불행히도 문제는 ASP.NET 버튼입니다. 2 초 전에 제거했습니다. "imagebutton"으로 바꾸려고했지만 같은 오류가 발생했기 때문에 받아 들일 수 없었습니다.

마침내 나는로 대체되었습니다 LinkButton. 작동하는 것 같습니다!


1

데이터 목록을 사용하고 있으며 푸시 버튼에 대해 동일한 오류가 발생했습니다. 방금 IsPostBack을 사용하여 컨트롤을 확인하고 채우면 문제가 해결됩니다! 큰!!!


1

나를 위해 일한 것은 다음 코드를 page_load에서 page_prerender로 옮기는 것입니다.

lstMain.DataBind();
Image img = (Image)lstMain.Items[0].FindControl("imgMain");

// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
    cs.RegisterStartupScript(cstype, csname1, "<script language=javascript> p=\"" + img.ClientID + "\"</script>");
}

1

가장 좋은 방법은 숨겨진 필드를 사용하고 이벤트 유효성 검사를 비활성화하지 않고 모든 목록 상자, 드롭 다운 목록을 변경하여 runat 서버 속성으로 선택하는 것입니다


ASP 제어에서 일반 <select id = "director"runat = "server">로 변경하면 효과적이었습니다. 나는 다음을 사용하여 코드의 가치에 액세스 할 수있었습니다 : 예 : 문자열 directorId = Request.Form [director.ID]
Baxter

1

Ajax 업데이트 패널을 사용중인 경우 <Triggers>태그를 추가 하고 그 안에 버튼을 사용하거나 포스트 백을 사용하는 컨트롤을 사용하십시오.<asp:PostBackTrigger .../>


1

채워질 수있는 데이터를 미리 알고 있으면 ClientScriptManager를 사용하여이 문제를 해결할 수 있습니다. 이전 사용자 선택에서 javascript를 사용하여 드롭 다운 상자를 동적으로 채울 때이 문제가 발생했습니다.

다음은 VB 및 C #에서 렌더링 방법을 재정의하고 드롭 다운 목록 ddCar에 대한 잠재적 값을 선언하는 예제 코드입니다.

VB에서 :

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    Dim ClientScript As ClientScriptManager = Page.ClientScript

    ClientScript.RegisterForEventValidation("ddCar", "Mercedes")

    MyBase.Render(writer)
End Sub

또는 C #의 약간의 변형은 다음과 같습니다.

protected override void Render(HtmlTextWriter writer)
{
    Page.ClientScript.RegisterForEventValidation("ddCar", "Mercedes");
    base.Render(writer);
}

초보자의 경우 :이 파일은 코드 숨김 파일 (.vb 또는 .cs)로 이동하거나 aspx 파일에서 사용하는 경우 <script>태그로 래핑 할 수 있습니다 .


1

이것이 내가 얻은 이유입니다.

ASP : ListBox가있었습니다. 처음에는 숨겨져있었습니다. 클라이언트 쪽에서는 AJAX를 통해 옵션으로 채울 것입니다. 사용자는 하나의 옵션을 선택했습니다. 그런 다음 제출 버튼을 클릭하면 서버는 옵션이 없다는 것을 기억하지 못하기 때문에 ListBox에 대해 모두 재미있을 것입니다.

그래서 내가 한 일은 서버에 양식을 다시 제출하기 전에 모든 목록 옵션을 지우는 것입니다. 그렇게하면 목록이 클라이언트로 비워지고 다시 비워진 이후 서버가 불평하지 않았습니다.

정렬 !!!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.