从我的视图到控制器的参数查询出现问题
从此控制器发送到视图
Controller1
[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.Deduccionesp从该视图发送到另一个控制器
这是什么?
`<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)
{
} `
答案 0 :(得分:0)
您不能以这种方式在动作之间传递复杂的数据。我建议您看看TempData
,它可以在连续的HTTP请求中保留下来。
答案 1 :(得分:0)
因此,这是一些未经测试的代码,但是您应该了解可以尝试的方法,
在要发布的页面(即第二页)中创建一个表单作为表单,在该表单的内部,对数据进行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的值。
答案 2 :(得分:0)
这是关于路由的。
@ Url.Action(“ actionName”,“ controllerName”,“ routeValue”)
默认情况下,它应类似于“ {controller = Home} / {action = Index} / {id?}”
参考https://docs.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。