Проблемы передачи строки из одного представления в контроллер ASP.NET MVC5 - PullRequest
0 голосов
/ 22 ноября 2018

У меня проблема в запросе параметров от моего представления к контроллеру

с этого контроллера, отправленного в представление

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>

и на другом контроллере I 'Я пытаюсь получить его

Контроллер 2

`public void ExportExcel (IList <int> DeductionsM)
{

} `

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Итак, это немного непроверенного кода, но вы должны понять, что вы можете попробовать,

Создать форму как форму на странице, которую вы хотите опубликовать (т.е. на второй странице),внутри этой формы сделайте 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 по умолчанию.

0 голосов
/ 23 ноября 2018

Это касается маршрутизации.

@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.

0 голосов
/ 22 ноября 2018

Таким способом нельзя передавать сложные данные между действиями.Я предлагаю вам взглянуть на TempData, который сохраняется при последовательных HTTP-запросах.

Блог сравнения ViewData / ViewBag / TempData

...