Вы также можете использовать String-интерполяцию, эта функция доступна в C # 6 и более поздних версиях
string requestData = $"{{\"api_version\":{apiVersion},\"method\":\"{method}\",\"merchant_account\":\"{merchantAccount}\",\"merchant_password\":\"{merchantPassword}\",\"transaction_unique_id\":\"{transactionId}\",\"amount\":{amount},\"currency\":\"{currency}\",\"callback_url\":\"{callbackUrl}\",\"user_id\":\"{id}\",\"user_ip\":\"{ip}\",\"user_email\":\"{mail}\",\"card\":{{\"card_number\":\"{cardNumber}\"}}";
Я нашел решение, и оно довольно простое, вам просто нужно поместить GridView в UpdatePanel и указать на PostBackTrigger в этом элементе управления:
<asp:UpdatePanel ID="upMultiUpload" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:GridView ID="GridFiles" runat="server"> ... </asp:GridView>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="btnUpload" />
<asp:PostBackTrigger ControlID="GridFiles" />
</Triggers>
</asp:UpdatePanel>
Проблема с JavaScript исчезает с этим, но это необходимо изменить код для снятия с охраны файла:
response.ClearContent();
response.Clear();
response.AddHeader("Content-Disposition", "attachment; filename=" + stName);
response.AddHeader("Content-Length", toDownload.Length.ToString());
response.ContentType = "application/octet-stream";
response.WriteFile(stUbication);
response.Flush();
Однако он не работает без обратной передачи, поскольку необходимо перезагрузить страницу для отправки файлов, некоторые реализации, которые я обнаружил в Интернете, были с элементом управления AsyncFileUpload, но он не адаптируется к моему проекту, потому что я отвечаю за несколько файлов, другие реализации используют AJAX и ASHX, но в моем случае мне нужен GridView ... Я до сих пор не знаю, есть ли решение для этот вопрос.
Эти ссылки очень помогли понять проблему:
Загрузка файла не работает с AsyncPostBackTrigger в ASP.Net
https: // forums.asp.net/t/1669892.aspx?Request+Files+is+empty