Заполните форму на Blazor отправить

#c# #.net #blazor-server-side

Вопрос:

У меня есть форма на стороне сервера Blazor, которую я создал прямо здесь

 lt;EditForm Model="formValues" OnValidSubmit="@DownloadExcelFile"gt;   lt;DataAnnotationsValidator /gt;  lt;MatThemeProvider Theme="@theme"gt;  lt;div class="row text-center"gt;   lt;div class="col-6 text-right pb-3"gt;  lt;/divgt;    lt;/divgt;  lt;div class="row formRow"gt;  lt;div class="col-12 text-center pb-2"gt;  lt;MatSelect Label="Region" @bind-Value="@formValues.Region"gt;  @foreach (var region in Regions)  {  lt;MatOptionString Value="@region.Id.ToString()"gt;@region.Descriptionlt;/MatOptionStringgt;  }    lt;/MatSelectgt;  lt;ValidationMessage For="@(() =gt; formValues.Region)" /gt;  lt;/divgt;  lt;div class="col-6 text-right pb-2"gt;  lt;MatSelect Label="Manual Key" Id="allowManuallyKeyedTxns" @bind-Value="@formValues.AllowManuallyKeyedTxns"gt;  lt;MatOptionString Value="1"gt;Yeslt;/MatOptionStringgt;  lt;MatOptionString Value="0"gt;Nolt;/MatOptionStringgt;    lt;/MatSelectgt;  lt;ValidationMessage For="@(() =gt; formValues.AllowManuallyKeyedTxns)" /gt;  lt;/divgt;   lt;div class="col-6 text-left pb-2"gt;  lt;MatSelect Label="Refund Exemption" Id="refundExemption" @bind-Value="@formValues.RefundExcemption"gt;  lt;MatOptionString Value="1"gt;Yeslt;/MatOptionStringgt;  lt;MatOptionString Value="0"gt;Nolt;/MatOptionStringgt;      lt;/MatSelectgt;  lt;ValidationMessage For="@(() =gt; formValues.RefundExcemption)" /gt;  lt;/divgt;  lt;div class="col-6 text-right pb-2"gt;  lt;MatSelect Label="Advice Exemption" Id="adviceExemption" @bind-Value="@formValues.AdviceExemption"gt;  lt;MatOptionString Value="1"gt;Yeslt;/MatOptionStringgt;  lt;MatOptionString Value="0"gt;Nolt;/MatOptionStringgt;      lt;/MatSelectgt;  lt;ValidationMessage For="@(() =gt; formValues.AdviceExemption)" /gt;  lt;/divgt;  lt;div class="col-6 text-left pb-2"gt;  lt;MatSelect Label="Tip Adjustment" Id="tipAdjustment" @bind-Value="@formValues.TipAdjustment"gt;  lt;MatOptionString Value="1"gt;Yeslt;/MatOptionStringgt;  lt;MatOptionString Value="0"gt;Nolt;/MatOptionStringgt;      lt;/MatSelectgt;  lt;ValidationMessage For="@(() =gt; formValues.TipAdjustment)" /gt;  lt;/divgt;  lt;div class="col-6 text-right pb-2"gt;  lt;MatDatePicker Label="Start Date" @bind-Value="@formValues.TxnDate" EnableTime="false" Format="MMM/dd/yyyy"gt;lt;/MatDatePickergt;   lt;ValidationMessage For="@(() =gt; formValues.TxnDate)" /gt;  lt;/divgt;  lt;div class="col-6 text-left pb-2"gt;  lt;MatDatePicker Label="End Date" @bind-Value="@formValues.TxnEndDate" EnableTime="false" Format="MMM/dd/yyyy"gt;lt;/MatDatePickergt;   lt;ValidationMessage For="@(() =gt; formValues.TxnEndDate)" /gt;  lt;/divgt;   lt;div class="col-12 text-center"gt;  lt;div class="col-12 p-3"gt;  lt;button type="submit" class="btn btn-outline-success"gt;  Export to Excelamp;nbsp;  lt;i class="fa fa-file-excel" aria-hidden="true"gt;lt;/igt;  lt;/buttongt;  lt;/divgt;  lt;/divgt;   lt;/divgt;  lt;/MatThemeProvidergt;  lt;/EditFormgt;  

И метод, который при отправке выполнит запрос из базы данных и создаст файл excel. Как вы можете видеть здесь

 async Task DownloadExcelFile()  {  DownloadExcel(formValues.Region, formValues.TxnDate, formValues.TxnEndDate, formValues.AllowManuallyKeyedTxns, formValues.AdviceExemption, formValues.RefundExcemption, formValues.TipAdjustment, formValues.isManuallyKeyed, formValues.isAdviceExemption, formValues.isRefundExemption, formValues.isTipAdjustment);   }  public void DownloadExcel(string Region, DateTime? StartDate, DateTime? EndDate, string ManuallyKeyedTxsn, string AdviceExemption, string RefundExemption, string TipAdjustment, bool isManuallyKeyed, bool isAdvice, bool isRefund, bool isTip)  {  var RegionId = Convert.ToInt64(Region);  var ExcelFile = OreService.OreExportToExcel(RegionId, StartDate, EndDate, ManuallyKeyedTxsn, AdviceExemption, RefundExemption, TipAdjustment, isManuallyKeyed, isAdvice, isRefund, isTip);  string excelName;   var stream = new MemoryStream();  ExcelPackage.LicenseContext = LicenseContext.NonCommercial;  using (var package = new ExcelPackage(stream))  {  var workSheet = package.Workbook.Worksheets.Add("POS Terminal Access Audit Report");     workSheet.Cells["A2:A2"].LoadFromCollection(from a in ExcelFile select new { MerchantID = a.MerchantRecord.ToString(), MerchantName = a.Name.ToString(), DoingBusinessAs = a.LegalName, MerchantCategoryCode = a.Mccrecord, MerchantCategoryCodeDescription = a.MccDescription, a.AddressLine1, a.AddressLine2, a.AddressLine3, a.AddressLine4, a.City, a.PhoneNumber, a.EmailAddress, a.TerminalId, TerminalType = a.TermType, CurrentManuallyKeyed = a.ManuallyKeyedString, ChangedManuallyKeyed = a.AllowManuallyKeyedChangedValueString, ChangedManuallyKeyedDate = a.AllowManuallyKeyedChangedDate, a.ExpireByPassCreditDate, CurrentCreditByPassValue = a.BypassCreditString, ChangedCreditBypassValue = a.RefundBypassChangedString, RefundBypassChangedDate = a.RefundBypassChangedDate, RefundBypassExpiryDate = a.RefundBypassEndDate, CurrentAdviceBypassValue = a.BypassAdviceString, ChangedAdviceBypassValue = a.BypassAdviceChangedString, AdviceBypassChangedDate = a.AdviceBypassChangedDate, CurrentTip = a.TipString, TipChangedValue = a.TipChangedString, a.TipChangedDate }, true);  workSheet.DefaultColWidth = 25;  excelName = $"POS Terminal Access Audit Report-{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx";      JsRuntime.SaveAs(excelName, package.GetAsByteArray());  }  

Теперь я ни за что на свете не могу понять, почему эта форма на работе по отправке. Я установил точки останова, и когда я нажимаю кнопку «Отправить», задача «Загрузить файл» никогда не активируется, я не могу сказать, неправильно ли я создал форму или моя задача или метод создания файла excel неисправны. Любая помощь будет признательна

Ответ №1:

В форме редактирования есть @ для метода onValidSubmit. То, что вы хотите, вероятно, что-то вроде. Это может сработать для .Net 6, но, возможно, вы захотите попробовать:

 lt;EditForm Model="formValues" OnValidSubmit="()=gt;DownloadExcelFile()"gt; ...  

или

 lt;EditForm Model="formValues" OnValidSubmit="DownloadExcelFile"gt; ...