首页 > 解决方案 > 循环过程中的 RedirectToAction [.Net Core 3.1]

问题描述

我一直在努力完成我正在开发的应用程序,

这是场景:

  1. 我有一个 Razor 页面,用户将在其中输入客户编号、公司代码和日期。用户可以输入多个客户编号,应用程序将用逗号分隔它们。
  2. 一旦用户输入详细信息,带有 asp-action 的按钮指向名为 GenerateSoa 的操作,它将运行一个foreach语句,该语句将为RedirectToAction在 GUI 上输入的每个客户

当循环运行时,问题从这里开始,即使输入了 3 个客户,它也只会打开一个选项卡。它应该打开 3 个选项卡,其中包含 3 个不同客户的详细信息。下面是我的代码

但是,我没有包含 SoaLoopercshtml文件。

SoaController.cs

public IActionResult GenerateSoa()
{
    ClearAmounts();

    #region Date management for SOA

    // First day of Current Month
    var FirstDateOfCurrentMonth = new DateTime(SD.DateToday.Year, SD.DateToday.Month, 1);
    var PreviousMonthFirstDay = FirstDateOfCurrentMonth.AddMonths(-1);
    var PreviousMonthLastDay = DateTime.DaysInMonth(SD.DateToday.Year, PreviousMonthFirstDay.Month);

   ****** Ommitted some code *****

    // Get last day of Previews month
    var PreviewsBalanceDate = PreviousMonthFirstDay.Month.ToString() + "/" + 
        PreviousMonthLastDay.ToString() + "/" + PreviousMonthFirstDay.Year.ToString();

    #endregion Date management for SOA

    //SD.GuiCustomerNum = customer.ToString();

    var bsid_unpaid_payments = _context.BSIDs.Where(l => 
       (l.UMSKZ == "" || l.UMSKZ != "C") && l.BLART == "DJ");
    foreach (var payments in bsid_unpaid_payments)
    {
        SD.PAmount += Convert.ToDouble(payments.DMBTR);
    }
    SD.UPTotalAmount = SD.UPAmount - SD.PAmount;

    return View();
}

public IActionResult SoaLooper(string customer, int company, DateTime asof)
{
    string[] customerNum = customer.Split(',');
    SD.GuiCompany = company.ToString();
    SD.DateToday = asof;

    foreach (var item in customerNum)
    {
        SD.GuiCustomerNumSelected = item.ToString();
        RedirectToAction(nameof(GenerateSoa));
    }

    return View();
}

索引.cshtml

<div class="container h-100">
    <div class="row h-100 justify-content-center align-items-center border">
        <form method="post" class="col-12 text-center">
            <div class="col-12 border-bottom">
                <h2 class="text-primary">Statement of Account</h2>
            </div>
            <div class="col-8 pt-4">
                <div class="form-group row">
                    <div class="col-4">
                        <label class="float-right">Customer</label>
                    </div>
                    <div class="col-8">
                        <input id="customer" name="customer" class="form-control" />
                    </div>
                </div>
                <div class="form-group row">
                    <div class="col-4">
                        <label class="float-right">Company Code</label>
                    </div>
                    <div class="col-8">
                        <select id="company" name="company" class="form-control">
                            <option value="">Select a number</option>
                            <option value="2000">2000</option>
                            <option value="3000">3000</option>
                        </select>
                    </div>
                </div>
                <div class="form-group row">
                    <div class="col-4">
                        <label class="float-right">Statement as of</label>
                    </div>
                    <div class="col-8">
                        <input id="asof" name="asof" type="date" class="form-control" />
                    </div>
                </div>
                <div class="form-group row">
                    <div class="col-8 offset-4">
                        <div class="row">
                            <div class="col">
                                <button type="submit" formtarget="_blank" id="btnCheck" 
                                 class="btn btn-primary form-control" asp-action="SoaLooper">Generate</button>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </form>
    </div>
</div>

标签: javascriptc#entity-framework-coreasp.net-core-mvcasp.net-core-3.1

解决方案


RedirectToAction不打开新标签,它只是返回一个状态码 302 告诉客户端重定向。

如果你真的想打开多个新标签,你应该做一些事情,比如返回一个 url 列表,然后在页面加载时使用 window.open。

我还没有测试过,但你可以这样做:

将您的网址添加到列表中:

SoaController.cs

var newTabUrls = new List<string>();

foreach (var item in customerNum)
{
    SD.GuiCustomerNumSelected = item.ToString();
    
    newTabUrls.Add(nameof(GenerateSoa));
}

return View(newTabUrls); 

索引.cshtml

<script type="text/javascript">

    @if(Model?.Any() ?? false)
    {
        @foreach(var url in Model)
        {
            @:window.open(url, "_blank");
        }
    }
</script>

在新选项卡(而不是新窗口)中打开 URL

如何在asp.net中单击按钮的新选项卡中打开页面?


推荐阅读