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

时间:2018-11-22 15:51:02

标签: javascript c# asp.net asp.net-mvc asp.net-mvc-4

从我的视图到控制器的参数查询出现问题

从此控制器发送到视图

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)
{

} `

3 个答案:

答案 0 :(得分:0)

您不能以这种方式在动作之间传递复杂的数据。我建议您看看TempData,它可以在连续的HTTP请求中保留下来。

ViewData/ViewBag/TempData comparision blog

答案 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。