将字符串从一个视图传递到控制器时出现问题 ASP.NET MVC5
Problems passing a string from one view to the controller 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.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)
{
} `
您不能以这种方式在操作之间传递复杂的数据。我建议您查看 TempData
,它在连续的 HTTP 请求中仍然存在。
所以,这是一些未经测试的代码,但您应该知道可以尝试什么,
在你想要的页面post(即第二页)创建一个表单,在那个表单里面,对你的数据做一个forloop
@using(Html.BeginForm(........))
{....
@{
var stringList = (List <string>) ViewBag.Deduccionesp;
for(int i = 0; i < stringList.Count; i ++)
{
@Html.Hidden($"DeductionsM[{i}]",stringList[i])
}
}
}
然后在最后,您的 link 将 post 这个表单,其值将绑定到默认的 ModelBinder。
这是关于路由的。
@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。
我从视图到控制器的参数查询有问题
从这个控制器发送到视图
控制器 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.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)
{
} `
您不能以这种方式在操作之间传递复杂的数据。我建议您查看 TempData
,它在连续的 HTTP 请求中仍然存在。
所以,这是一些未经测试的代码,但您应该知道可以尝试什么,
在你想要的页面post(即第二页)创建一个表单,在那个表单里面,对你的数据做一个forloop
@using(Html.BeginForm(........))
{....
@{
var stringList = (List <string>) ViewBag.Deduccionesp;
for(int i = 0; i < stringList.Count; i ++)
{
@Html.Hidden($"DeductionsM[{i}]",stringList[i])
}
}
}
然后在最后,您的 link 将 post 这个表单,其值将绑定到默认的 ModelBinder。
这是关于路由的。
@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。