将字符串从一个视图传递到控制器ASP.NET MVC5时出现问题



我在从视图到控制器的参数查询中遇到问题

从该控制器发送到视图

控制器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的值。

最新更新