我在从视图到控制器的参数查询中遇到问题
从该控制器发送到视图
控制器1
[HttpPost]
[ValidateAntiForgeryToken]
Public ActionRelieve DetailPlannelEmployee (int [] DeductionsId)
{
if (DeductionsId! = null)
{
IList <string> Deductionsp = new List <string> ();
for (int i = 0; i <DeductionsId.Length; i ++)
{
int idDeduction = DeductionsId [i];
var Deduction = db.Tbl_Deducciones.FirstOrDefault (t => t.DedId == idDeduction);
Deductionsp.Add (Deduction.DedId.ToString ());
}
ViewBag.Deduccionesp
已经在视图中
<table class =" table table-xxs datatable-responsive ">
<thead>
<tr>
foreach (var Deduction in (List <string>) ViewBag.Deduccionesp) // Foreach of the selected deductions
{
<th> Deduction </ th>
}
</ tr>
</ thead>
<tbody>
但我需要把那个ViewBag.Dexercionesp从那个视图发送到另一个控制器
这是什么?
`<li> <a href="@Url.Action("ExportarExcel","Planilla", new {DeduccionesM = ViewBag.Deduccionesp })"> <i class =" icon-file-excel position-left "> </ i> Export an Excel </a> </ li>
在另一个控制器中,我正试图接收
控制器2
`public void ExportExcel (IList <int> DeductionsM)
{
} `
这是关于路由的。
@Url.Action("actionName"、"controllerName"one_answers"routeValue"(
默认情况下,它应该像"{controller=Home}/{action=Index}/{id?}">
参考。https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.1
例如,
<a href="@Url.Action("Products","Details", 5)">...</a>
并将参数id传递给控制器。
public IActionResult Details(int id) { ... }
如果要传递字符串,例如
<a href="@Url.Action("ExportarExcel","Planilla", new { DeduccionesM = ViewBag.Deduccionesp })">...</a>
控制器会像
public void ExportExcel (sting DeductionsM) { ... }
参数的类型指的是路由值的类型,参数的名称指的是路径值的名称,因此您可以将字符串更改为其他类型,如IList。
不能以这种方式在操作之间传递复杂的数据。我建议您看看TempData
,它在连续的HTTP请求中仍然存在。
ViewData/ViewBag/TempData比较博客
所以,这是一段未经测试的代码,但你应该知道你可以尝试什么,
在你想要发布的页面(即第二页(中创建一个表单,在该表单内部,对你的数据进行forloop
@using(Html.BeginForm(........))
{....
@{
var stringList = (List <string>) ViewBag.Deduccionesp;
for(int i = 0; i < stringList.Count; i ++)
{
@Html.Hidden($"DeductionsM[{i}]",stringList[i])
}
}
}
然后在最后,您的链接将发布此表单,该表单将具有绑定到默认ModelBinder的值。