javascript - 循环过程中的 RedirectToAction [.Net Core 3.1]
问题描述
我一直在努力完成我正在开发的应用程序,
这是场景:
- 我有一个 Razor 页面,用户将在其中输入客户编号、公司代码和日期。用户可以输入多个客户编号,应用程序将用逗号分隔它们。
- 一旦用户输入详细信息,带有 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>
解决方案
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>
推荐阅读
- java - Java - 当从另一个方法创建对象时,尝试从主方法中打印对象的 get 方法
- css - 为什么此文本在 li 元素之外运行?
- r - 使用回收的向量元素将 R 列表转换为数据框
- excel - Excel VBA,切片器 - 如何使用 vba 从 excel 切片器中的一千个项目中选择一项?
- c# - ThreadPool.QueueUserWorkItem 使 UI 挂起
- ruby - OFX 如何定义账户在区块可用?
- c# - SQL Server 表设计建议(实体框架代码优先,C#)
- reactjs - 我应该在哪里写 axios 代码来反应?
- firefox-addon-webextensions - 无法重定向 `file:///` 请求
- javascript - 如何直接获取父节点?