source

Sys.WebForms.페이지 요청 관리자 파서 오류 예외:서버에서 받은 메시지를 구문 분석할 수 없습니다.

nicesource 2023. 6. 18. 16:06
반응형

Sys.WebForms.페이지 요청 관리자 파서 오류 예외:서버에서 받은 메시지를 구문 분석할 수 없습니다.

제 페이지에 그리드 보기가 있는데 엑셀 시트로 내보내려고 합니다. 아래는 제가 이 작업을 수행하기 위해 작성한 코드입니다. 여기서 저는 이미 그리드를 바인딩하는 방법에 데이터 세트를 전달하고 있습니다.btnExcelExport그리드 내용을 Excel 시트로 내보내는 버튼입니다.

private void BindGridView(DataSet ds)
{
    if (ds.Tables.Count > 0)
    {
        if (ds.Tables[0].Rows.Count > 0)
        {
            GVUserReport.DataSource = ds;
            GVUserReport.DataBind();
            btnExcelExport.Visible = true;
        }
    }
}

protected void btnExcelExport_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.AddHeader("content-disposition","attachment;filename=FileName.xls");
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/vnd.xls";
    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    GVUserReport.RenderControl(htmlWrite);
    Response.Write(stringWrite.ToString());
    Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
    return;
}

디버깅할 때 그리드가 성공적으로 바인딩되었지만 Excel로 내보내려고 하면 다음 오류가 발생합니다.

"Microsoft JScript 런타임 오류: Sys.웹 양식.페이지 요청 관리자 파서 오류 예외:서버에서 받은 메시지를 구문 분석할 수 없습니다."

저는 이 문제를 해결했습니다.내가 사용하는 것처럼UpdatePanel아래 코드를 추가했습니다.Page_Load그 페이지의 이벤트와 그것은 나에게 효과가 있었습니다.

protected void Page_Load(object sender, EventArgs e) {
  ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
  scriptManager.RegisterPostBackControl(this.btnExcelExport);
  //Further code goes here....
}

저의 경우 일부 응답으로 인해 문제가 발생했습니다. 사이트의 마스터 페이지에 명령을 작성합니다(코드 뒤에 있음)디버깅 목적으로만 사용되었습니다(그게 최선의 방법은 아닙니다).

컨트롤을 에 추가했습니다.Triggers업데이트 패널의 태그:

    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="exportLinkButton" />
    </Triggers>
</asp:UpdatePanel>

이렇게 하면 exportLinkButton이 UpdatePanel을 업데이트하도록 트리거합니다.
자세한 내용은 여기.

저도 같은 오류가 있었는데, AsyncPostBackTrigger 대신 시도했습니다.이것은 저에게 효과가 있었습니다.왜냐하면 우리는 부분적인 포스트백을 원하지 않기 때문입니다.

1- 응답을 사용하지 않습니다.글을 씁니다.

2- 아래 코드를 Page_Load가 아닌 LinkButton(동적으로)을 생성하여 문제를 해결했습니다.

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(lblbtndoc1);

VB를 위해서.넷 프렌즈 -

Dim scriptManager As ScriptManager = scriptManager.GetCurrent(Me.Page)
scriptManager.RegisterPostBackControl(Me.YourButtonNameHere)

이것을 PageLoad에 추가하면 문제가 해결됩니다.

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(this.lblbtndoc1);

이것은 저에게도 효과가 있었지만, 추가로 (아래)가 있습니다.

protected void Page_Load(object sender, EventArgs e) {
  ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
  scriptManager.RegisterPostBackControl(this.btnExcelExport);
  //Further code goes here....
}

이벤트 처리가 완료된 후 다른 버튼을 클릭하기 위해 버튼에 스크립트를 등록하고 있었습니다.작동하려면 업데이트 패널에서 다른 단추를 제거해야 했습니다(누군가가 동일한 문제에 직면할 경우).

저에게 효과가 있었던 것은 그물을 치는 것이었습니다.MaxHttpCollectionInetpub VirtualDirectories\443\web.config 파일의 appSettings 태그에서 높은 값으로 키:

<configuration>
    <appSettings>
        <add key="aspnet:MaxHttpCollectionKeys" value="100000" />
    </appSettings>
</configuration>

이 모든 작업을 수행하기 전에 제공했는지 확인하십시오.asp:LinkButton ID와 같습니다.asp:PostBackTrigger ControlID그렇지 않으면 페이지가 동일한 오류를 겪게 됩니다.

언급URL : https://stackoverflow.com/questions/11221033/sys-webforms-pagerequestmanagerparsererrorexception-the-message-received-from-t

반응형