【问题标题】:RedirectToAction in Loop process [.Net Core 3.1]循环过程中的 RedirectToAction [.Net Core 3.1]
【发布时间】:2021-03-16 07:24:28
【问题描述】:

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

这里是场景:

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

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

但是我没有包含 SoaLooper cshtml 文件。

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>

【问题讨论】:

  • RedirectToAction 不会打开新标签页,它只是返回状态码 302 告诉客户端重定向。如果你真的想打开多个新标签,你应该做一些事情,比如返回一个 url 列表,然后在页面加载时使用 window.open
  • @Shoejep:我应该把window.open放在哪里?
  • 添加了解释的答案

标签: javascript c# entity-framework-core asp.net-core-mvc asp.net-core-3.1


【解决方案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); 

Index.cshtml

<script type="text/javascript">

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

Open a URL in a new tab (and not a new window)

how to open a page in new tab on button click in asp.net?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多