【问题标题】:Make form on Blazor submit在 Blazor 上提交表单
【发布时间】:2022-01-04 16:44:54
【问题描述】:

我在这里创建了一个 Blazor 服务器端表单

<EditForm Model="formValues" OnValidSubmit="@DownloadExcelFile">

            <DataAnnotationsValidator />
            <MatThemeProvider Theme="@theme">
                <div class="row text-center">

                    <div class="col-6 text-right pb-3">
                    </div>


                </div>
                <div class="row formRow">
                    <div class="col-12 text-center pb-2">
                        <MatSelect Label="Region" @bind-Value="@formValues.Region">
                            @foreach (var region in Regions)
                                    {
                                <MatOptionString Value="@region.Id.ToString()">@region.Description</MatOptionString>
                                    }


                        </MatSelect>
                        <ValidationMessage For="@(() => formValues.Region)" />
                    </div>
                    <div class="col-6 text-right pb-2">
                        <MatSelect Label="Manual Key" Id="allowManuallyKeyedTxns" @bind-Value="@formValues.AllowManuallyKeyedTxns">
                            <MatOptionString Value="1">Yes</MatOptionString>
                            <MatOptionString Value="0">No</MatOptionString>


                        </MatSelect>
                        <ValidationMessage For="@(() => formValues.AllowManuallyKeyedTxns)" />
                    </div>

                    <div class="col-6 text-left pb-2">
                        <MatSelect Label="Refund Exemption" Id="refundExemption" @bind-Value="@formValues.RefundExcemption">
                            <MatOptionString Value="1">Yes</MatOptionString>
                            <MatOptionString Value="0">No</MatOptionString>




                        </MatSelect>
                        <ValidationMessage For="@(() => formValues.RefundExcemption)" />
                    </div>
                    <div class="col-6 text-right pb-2">
                        <MatSelect Label="Advice Exemption" Id="adviceExemption" @bind-Value="@formValues.AdviceExemption">
                            <MatOptionString Value="1">Yes</MatOptionString>
                            <MatOptionString Value="0">No</MatOptionString>




                        </MatSelect>
                        <ValidationMessage For="@(() => formValues.AdviceExemption)" />
                    </div>
                    <div class="col-6 text-left pb-2">
                        <MatSelect Label="Tip Adjustment" Id="tipAdjustment" @bind-Value="@formValues.TipAdjustment">
                            <MatOptionString Value="1">Yes</MatOptionString>
                            <MatOptionString Value="0">No</MatOptionString>




                        </MatSelect>
                        <ValidationMessage For="@(() => formValues.TipAdjustment)" />
                    </div>
                    <div class="col-6 text-right pb-2">
                        <MatDatePicker Label="Start Date" @bind-Value="@formValues.TxnDate" EnableTime="false" Format="MMM/dd/yyyy"></MatDatePicker>

                        <ValidationMessage For="@(() => formValues.TxnDate)" />
                    </div>
                    <div class="col-6 text-left pb-2">
                        <MatDatePicker Label="End Date" @bind-Value="@formValues.TxnEndDate" EnableTime="false" Format="MMM/dd/yyyy"></MatDatePicker>

                        <ValidationMessage For="@(() => formValues.TxnEndDate)" />
                    </div>

                    <div class="col-12 text-center">
                        <div class="col-12 p-3">
                            <button type="submit" class="btn btn-outline-success">
                                Export to Excel&nbsp;
                                <i class="fa fa-file-excel" aria-hidden="true"></i>
                            </button>
                        </div>
                    </div>

                </div>
            </MatThemeProvider>
        </EditForm>

提交时的方法将从数据库中查询并创建一个 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());
        }

现在我无法弄清楚为什么这个表单在提交时起作用。我已经设置了断点,当我单击提交按钮时,DownloadExcelFile 任务从未激活我无法判断我是否错误地制作了表单,或者我创建 Excel 文件的任务或方法有问题。任何帮助将不胜感激

【问题讨论】:

    标签: c# .net blazor-server-side


    【解决方案1】:

    EditForm 的 onValidSubmit 方法上有一个@。你想要的可能是这样的。这可能适用于 .Net 6,但也许您可能想尝试一下:

    <EditForm Model="formValues" OnValidSubmit="()=>DownloadExcelFile()">
    ...
    

    或

    <EditForm Model="formValues" OnValidSubmit="DownloadExcelFile">
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2020-11-23
      • 2021-10-20
      • 2022-01-21
      • 2021-12-20
      • 2020-07-15
      • 2018-04-02
      相关资源
      最近更新 更多