내 상황에 맞는 답변을 찾을 수 없어 다른 사용자에게 도움이되기를 희망하는 답변 된 질문을 게시하고 있습니다.유효하지 않은 포스트 백 또는 콜백 인수 (HiddenField 및 Container Visible = false)
나는 오류를
잘못된 다시 게시 또는 콜백 인수를 얻고 있었다. 이벤트 유효성 검사는 구성에서 사용하거나 < % @ Page EnableEventValidation = "true"%> 페이지에서 활성화됩니다. 보안을 위해이 기능은 포스트 백 또는 콜백 이벤트가 원래 으로 렌더링 된 서버 컨트롤에서 발생한 이벤트임을 확인합니다. 데이터가 유효하고 예상되는 경우 ClientScriptManager.RegisterForEventValidation 메서드를 사용하여 유효성 검사를 위해 포스트 백 또는 콜백 데이터를 등록하십시오.
at System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument)
at System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument)
at System.Web.UI.WebControls.HiddenField.LoadPostData(String postDataKey, NameValueCollection postCollection)
at System.Web.UI.WebControls.HiddenField.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection)
at System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
은 내가 각 행에 버튼, (몇 100S 행 포함) 데이터 바인딩 ListView를 가지고있다. 단추가 팝업을 가져옵니다. 팝업에는 드롭 다운리스트와 비동기 포스트 백을 수행하는 다른 컨트롤이 있습니다. 내 큰 테이블을 새로 고치는 것을 피하기 위해 비동기 포스트 백을 수행해야합니다.
한 행의 버튼을 클릭하면 오류가 발생하고 포스트 백 (선택한 항목이 변경됨)을 발생시키는 팝업 내 드롭 다운 목록을 변경합니다. 팔.
다음은 팝업 및 자바 스크립트가 전혀없는 축소 된 샘플을위한 마크 업입니다. 그것은 여전히 문제를 보여줍니다. 행에있는 버튼을 두 번 클릭하여 오류를 가져 오십시오.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestPopupAsynchPostback.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="scriptMgr" runat="server" ScriptMode="Debug" EnablePartialRendering="true"
EnableScriptGlobalization="true" EnableScriptLocalization="true" EnablePageMethods="true"/>
<asp:ObjectDataSource ID="ListDataSource" runat="server" SelectMethod="List" TypeName="TestPopupAsynchPostback.Default" />
<asp:Label runat="server" ID="PageLabel"></asp:Label>
<asp:ListView ID="EL" runat="server" DataSourceID="ListDataSource" OnItemDataBound="EntityList_OnItemDataBound">
<LayoutTemplate>
<table border="1">
<tr id="itemPlaceholder" runat="server" enableviewstate="false">
</tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr runat="server" id="DefaultRow" enableviewstate="false">
<td>
<asp:Label ID="Lbl" runat="server" EnableViewState="false" />
</td>
<td>
<button runat="server" type="button" id="ReportingButton" enableviewstate="false" onserverclick="ReportingButton_OnClick" causesvalidation="false">click</button>
</td>
</tr>
<%-- Fix part 1: Change SpecialRow visible = true--%>
<tr runat="server" id="SpecialRow" visible="false" enableviewstate="false">
<td>
<asp:Label ID="Lbl2" runat="server" EnableViewState="false" />
<asp:HiddenField runat="server" ID="fn_hid" />
</td>
</tr>
</ItemTemplate>
</asp:ListView>
</form>
</body>
</html>
여기에 코드 뒤에 :
나는 처음에 내가 물건을 수정하고 나의 자바 스크립트가 잘못이라고 생각using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
namespace TestPopupAsynchPostback
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager sm = ScriptManager.GetCurrent(Page);
PageLabel.Text = DateTime.UtcNow.ToString() + " IsPostBack:" + IsPostBack + " IsInAsyncPostBack:" + (sm == null ? "" : sm.IsInAsyncPostBack.ToString());
}
protected override void Render(HtmlTextWriter writer)
{
ScriptManager sm = ScriptManager.GetCurrent(this.Page);
if (sm != null)
{
foreach (ListViewDataItem row in EL.Items)
{
HtmlButton reportingButton = row.FindControl("ReportingButton") as HtmlButton;
if (reportingButton != null)
sm.RegisterAsyncPostBackControl(reportingButton);
}
}
base.Render(writer);
}
public IList<string> List()
{
return (new string[] { "ONE", "TWO"}).ToList();
}
protected void ReportingButton_OnClick(object sender, EventArgs e)
{
//Do something useful here, for now, just a postback event
}
protected void EntityList_OnItemDataBound(object sender, ListViewItemEventArgs e)
{
Label lbl = e.Item.FindControl("Lbl") as Label;
Label lbl2 = e.Item.FindControl("Lbl2") as Label;
lbl.Text = lbl2.Text = e.Item.DataItem.ToString();
HtmlTableRow specialRow = e.Item.FindControl("SpecialRow") as HtmlTableRow;
if (e.Item.DataItemIndex%2 == 0)
{
HiddenField fn_hid = e.Item.FindControl("fn_hid") as HiddenField;
fn_hid.Value = "test1";
specialRow.Visible = true;
}
//Fix part 2: set SpecialRow Visible = false in code behind
//else
// specialRow.Visible = false;
}
}
}
공유 주셔서 감사합니다.하지만 답변으로 표시하지 않은 이유는 무엇입니까? –
죄송합니다. 지금 답변으로 표시되었습니다. –