ModalContainer.razor.Backend.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System.Linq;
  2. using System;
  3. using Microsoft.AspNetCore.Components;
  4. using Microsoft.Extensions.Primitives;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Net;
  8. using System.Net.Http;
  9. using System.Threading.Tasks;
  10. namespace FastReport.Web.Blazor.Components.Internal
  11. {
  12. public partial class ModalContainer
  13. {
  14. [Inject]
  15. internal NavigationManager NavManager { get; set; }
  16. private string ExportParametersToString()
  17. {
  18. if (!ExportParameters.Any())
  19. return "";
  20. var uri = string.Join('&',
  21. ExportParameters.Select(kvp =>
  22. $"{kvp.Key}={kvp.Value}"));
  23. #if DEBUG
  24. Console.WriteLine(uri);
  25. #endif
  26. return uri;
  27. }
  28. private async Task OkClick()
  29. {
  30. if (WebReport.ExportType == Exports.Email)
  31. {
  32. if (string.IsNullOrEmpty(ExportParameters["Address"])) return;
  33. await SendEmailAsync();
  34. }
  35. else
  36. {
  37. var href = $"{ExportsHelper.GetHref(WebReport)}&{ExportParametersToString()}";
  38. if (WebReport.HasValidationError)
  39. return;
  40. ExportParameters.Clear();
  41. WebReport.EnableModalDialog = false;
  42. NavManager.NavigateTo(href, true);
  43. }
  44. }
  45. private async Task SendEmailAsync()
  46. {
  47. var href = $"{WebReport.templte_email_export_url}";
  48. var formContent = new FormUrlEncodedContent(new Dictionary<string, string>
  49. {
  50. {"Address", ExportParameters["Address"]},
  51. {"Subject", ExportParameters["Subject"]},
  52. {"MessageBody", ExportParameters["MessageBody"]},
  53. {"ExportFormat", ExportParameters["ExportFormat"]},
  54. {"NameAttachmentFile", ExportParameters["NameAttachmentFile"]}
  55. });
  56. ExportParameters.Clear();
  57. WebReport.EnableModalDialog = false;
  58. var baseUri = new Uri(NavManager.BaseUri);
  59. var absoluteUri = new Uri(baseUri, href);
  60. using var httpClient = new HttpClient();
  61. var response = await httpClient.PostAsync(absoluteUri, formContent);
  62. if (response.IsSuccessStatusCode)
  63. {
  64. await ShowPositivePopup();
  65. }
  66. else if (response.StatusCode == HttpStatusCode.BadRequest)
  67. {
  68. await ShowNegativePopup();
  69. }
  70. }
  71. }
  72. }