Мне нужно обработать действие щелчка кнопки пользователя, отправив ему двоичный файл, хранящийся в базе данных, а также обновив базу данных, а изменения отразятся в RadGrid с помощью ajax.Отправить двоичный файл и обновить сетку с помощью ajax
Выполнение действий, отправка файла и обновление сетки, раздельно происходит просто отлично, но при попытке сделать это возвращает ошибку, говорящую, что ответ не может быть обработан.
Мне было интересно, есть ли альтернатива для этого.
У меня есть аналогичные куски кода:
JavaScript:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
var pbControl = null;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
Sys.WebForms.PageRequestManager.getInstance()
.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
$(".loads").attr("disabled", true);
}
function EndRequestHandler(sender, args) {
if (args.get_error() != undefined) {
var errorMessage = args.get_error().message;
args.set_errorHandled(true);
errorMessage = errorMessage.replace(
"Sys.WebForms.PageRequestManagerServerErrorException:",
"");
alert(errorMessage);
}
$(".loads").attr("disabled", false);
}
</script>
</asp:ScriptManager>
asp.net:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div class="loads">
<telerik:RadGrid ID="Grid" runat="server"
OnItemCommand="Grid_ItemCommand">
<MasterTableView TableLayout="Auto">
<Columns>
<telerik:GridTemplateColumn>
<ItemTemplate>
<asp:ImageButton ID="Button" runat="server"
CommandName="Command"
CommandArgument='<%# Eval("Code") %>' />
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
</div>
</ContentTemplate>
</asp:UpdatePanel>
C#:
protected void Grid_ItemCommand(object sender,
Telerik.Web.UI.GridCommandEventArgs e)
{
if(e.CommandName == "Command")
{
// Update database
DatabaseUpdate();
Grid.Rebind();
// Send binary
HttpResponse response = this.Response;
byte[] bin = GetBinary(code);
MemoryStream memStream = null;
memStream = new MemoryStream(bin);
response.Clear();
response.AddHeader("content-disposition",
string.Format("attachment; filename={0}", "file.pdf"));
response.ContentType = string.Format("application/{0}", "pdf");
response.BufferOutput = false;
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = memStream.Read(buffer, 0, buffer.Length)) > 0)
{
response.OutputStream.Write(buffer, 0, bytesRead);
}
response.Flush();
}
}
Я не пробовал этот подход, но я думаю, что он должен работать. – Eduardo