Sys.WebForms.PageRequestManagerParserErrorException: 无法解析从服务器收到的消息 - Link Gridview 中的按钮
Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed - Link Button within Gridview
我目前正在开发 VS 2010。
我的内容页面上有一个 gridview。我正在尝试从服务器下载文件。
单击 link 按钮即可实现文件下载功能,该按钮位于每个单独记录的网格视图中。
gridview 放置在更新面板中,脚本管理器放置在母版页上。
另外,我在我的页面上使用了 bootstrap。
在带有 gridview 的 link 按钮上单击时,会显示以下错误
JavaScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException:
The message received from the server could not be parsed.
我在互联网上搜索了解决方案,但找不到任何修复方法。
我遇到了 links,其中按钮放置在网格之外,类似的问题是 faced.But,没有发现它有帮助。
我试过使用 "PostBackTrigger"。但这并不能解决问题。
我已经参考了下面的 link 但它没有为上面建议的问题提供解决方案
Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed
我也提到了其他 link,但找不到解决问题的办法。
删除更新面板也不是一个选项。
我正在放置我页面的相关设计和代码。
设计 -
<div class="col-xs-12 form-group">
<div class="table-responsive">
<asp:UpdatePanel ID="updPnlErrorDownload" runat="server" UpdateMode="Conditional">
<%--<Triggers>
<asp:AsyncPostBackTrigger ControlID="lnkLogFiles"/>
</Triggers>--%>
<ContentTemplate>
<asp:GridView ID="gvLogFilesDownload" runat="server"
AutoGenerateColumns="false" AllowPaging="true"
EmptyDataText="No Data Found" Width="100%"
CssClass="table table-striped table-bordered table-hover" PageSize="10"
onpageindexchanged="gvLogFilesDownload_PageIndexChanged"
onrowcommand="gvLogFilesDownload_RowCommand"
onrowcreated="gvLogFilesDownload_RowCreated">
<Columns>
<asp:TemplateField HeaderText="Date">
<ItemTemplate>
<asp:Label ID="lblDate" runat="server" Text='<%#Eval("Date") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Log Files">
<ItemTemplate>
<asp:LinkButton ID="lnkLogFiles" runat="server" Text='<%#Eval("Log Files") %>' Font-Underline="true" CommandName="Download" CommandArgument="<%#((GridViewRow)Container).RowIndex %>" OnClick="lnkLogFiles_Click"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
No Record Available</EmptyDataTemplate>
</asp:GridView>
</ContentTemplate>
<Triggers>
<%--<asp:PostBackTrigger ControlID="lnkLogFiles" />--%>
<%-- <asp:PostBackTrigger ControlID="gvLogFilesDownload$lnkLogFiles" />--%>
</Triggers>
</asp:UpdatePanel>
</div>
</div>
代码-
protected void lnkLogFiles_Click(object sender, EventArgs e)
{
LinkButton lnkBtnDownload = sender as LinkButton;
string file = lnkBtnDownload.Text;
//string sPath1 = Server.MapPath(file);
string sPath = Server.MapPath("~/ErrorLog/" + file);
//Response.ContentType = "APPLICATION/OCTET-STREAM";
Response.ContentType = "APPLICATION/pdf";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName(sPath));
Response.TransmitFile(sPath);
Response.End();
}
非常感谢任何意见/建议。
提前致谢。
问题在于这些控件位于模板中,因此您无法直接引用它们。使用 RowDataBound 事件并以编程方式为按钮分配触发器。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//check if the row is a datarow and not the first row
if (e.Row.RowType == DataControlRowType.DataRow)
{
//find the button with findcontrol
LinkButton lb = e.Row.FindControl("lnkLogFiles") as LinkButton;
//assign the button as a postback trigger
ScriptManager.GetCurrent(Page).RegisterPostBackControl(lb);
}
}
我目前正在开发 VS 2010。 我的内容页面上有一个 gridview。我正在尝试从服务器下载文件。
单击 link 按钮即可实现文件下载功能,该按钮位于每个单独记录的网格视图中。 gridview 放置在更新面板中,脚本管理器放置在母版页上。 另外,我在我的页面上使用了 bootstrap。
在带有 gridview 的 link 按钮上单击时,会显示以下错误
JavaScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.
我在互联网上搜索了解决方案,但找不到任何修复方法。 我遇到了 links,其中按钮放置在网格之外,类似的问题是 faced.But,没有发现它有帮助。
我试过使用 "PostBackTrigger"。但这并不能解决问题。 我已经参考了下面的 link 但它没有为上面建议的问题提供解决方案
Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed
我也提到了其他 link,但找不到解决问题的办法。 删除更新面板也不是一个选项。
我正在放置我页面的相关设计和代码。
设计 -
<div class="col-xs-12 form-group">
<div class="table-responsive">
<asp:UpdatePanel ID="updPnlErrorDownload" runat="server" UpdateMode="Conditional">
<%--<Triggers>
<asp:AsyncPostBackTrigger ControlID="lnkLogFiles"/>
</Triggers>--%>
<ContentTemplate>
<asp:GridView ID="gvLogFilesDownload" runat="server"
AutoGenerateColumns="false" AllowPaging="true"
EmptyDataText="No Data Found" Width="100%"
CssClass="table table-striped table-bordered table-hover" PageSize="10"
onpageindexchanged="gvLogFilesDownload_PageIndexChanged"
onrowcommand="gvLogFilesDownload_RowCommand"
onrowcreated="gvLogFilesDownload_RowCreated">
<Columns>
<asp:TemplateField HeaderText="Date">
<ItemTemplate>
<asp:Label ID="lblDate" runat="server" Text='<%#Eval("Date") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Log Files">
<ItemTemplate>
<asp:LinkButton ID="lnkLogFiles" runat="server" Text='<%#Eval("Log Files") %>' Font-Underline="true" CommandName="Download" CommandArgument="<%#((GridViewRow)Container).RowIndex %>" OnClick="lnkLogFiles_Click"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
No Record Available</EmptyDataTemplate>
</asp:GridView>
</ContentTemplate>
<Triggers>
<%--<asp:PostBackTrigger ControlID="lnkLogFiles" />--%>
<%-- <asp:PostBackTrigger ControlID="gvLogFilesDownload$lnkLogFiles" />--%>
</Triggers>
</asp:UpdatePanel>
</div>
</div>
代码-
protected void lnkLogFiles_Click(object sender, EventArgs e)
{
LinkButton lnkBtnDownload = sender as LinkButton;
string file = lnkBtnDownload.Text;
//string sPath1 = Server.MapPath(file);
string sPath = Server.MapPath("~/ErrorLog/" + file);
//Response.ContentType = "APPLICATION/OCTET-STREAM";
Response.ContentType = "APPLICATION/pdf";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName(sPath));
Response.TransmitFile(sPath);
Response.End();
}
非常感谢任何意见/建议。 提前致谢。
问题在于这些控件位于模板中,因此您无法直接引用它们。使用 RowDataBound 事件并以编程方式为按钮分配触发器。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//check if the row is a datarow and not the first row
if (e.Row.RowType == DataControlRowType.DataRow)
{
//find the button with findcontrol
LinkButton lb = e.Row.FindControl("lnkLogFiles") as LinkButton;
//assign the button as a postback trigger
ScriptManager.GetCurrent(Page).RegisterPostBackControl(lb);
}
}