Передача массива в качестве аргумента ActionResult [duplicate]

Вам нужно использовать метод javaScript parseInt(), чтобы вернуть строки в числа. Прямо сейчас они являются строками, поэтому добавление двух строк объединяет их, поэтому вы получаете «12».

4
задан user1166147 21 May 2012 в 00:30
поделиться

3 ответа

Вы не можете отправлять сложные типы в качестве параметров перенаправления в MVC, только примитивные типы, такие как числа и строки

Используйте TempData для передачи массива

...
if (reject != 0) {
    TempData["CheckedRecords"] = yourArray;
    return RedirectToAction("Index", new { filter = filterValue });
}
...

public ActionResult Index(string filter) {
    int[] newArrayVariable;
    if(TempData["CheckedRecords"] != null) {
        newArrayVariable = (int[])TempData["CheckedRecords"];
    }
    //rest of your code here
}
6
ответ дан CD Smith 21 August 2018 в 19:55
поделиться
  • 1
    Я думаю, что это правильный ответ. Поскольку вы, по существу, проходите вокруг параметров GET, как именно это будет соответствовать сложному типу, например массиву? I +1 этот ответ, потому что вы можете использовать словарь TempData для передачи значений. Обратите внимание, что данные доступны только для одного запроса, после чего он исчезает. – Only Bolivian Here 21 May 2012 в 02:25
  • 2
    Правильно, когда вы думаете об этом, вы просите визуализировать представление с новыми параметрами .. вы не можете создать URL-адрес с массивом. И да, 1 действие + 1 - все это хорошо, так что если перенаправленное действие необходимо перенаправить снова, его нужно будет воссоздать и отправить снова – CD Smith 21 May 2012 в 02:26
  • 3
    Это прекрасно работает и объясняет, почему то, что я пытаюсь, не ... Спасибо! – user1166147 21 May 2012 в 03:35

Я не уверен, что ASP.Net знает, как создать URL-адрес, используя массив int, который вы передаете. Если массив int однозначно идентифицирует ресурс, вы можете попытаться преобразовать массив в строку с разделителями (или аналогичную), разделенную по дефисам, а затем проанализировать строку в методе индекса.

Если вы просто пытаетесь сохранить данные между запросами, используйте TempData:

http://msdn.microsoft.com/en-us/library/system.web.mvc.controllerbase.tempdata.aspx

1
ответ дан Ant P 21 August 2018 в 19:55
поделиться

Вы отправляете два нулевых значения. Когда вы используете новый {}, вы создаете новый объект. Вы должны не только определять имена индексов, но и значения.

return RedirectToAction("Index", new { filter = filter, checkedRecords = checkedRecords });
1
ответ дан Travis J 21 August 2018 в 19:55
поделиться
  • 1
    Спасибо, что пытались помочь, однако это не проблема. Я попробовал это (см. Оригинальный пост), но это не имеет значения. Фильтр строк отлично работает и принимается индексом (как есть). Я делаю это в нескольких других местах успешно без дополнительного определения. Я попробовал это снова для хорошей меры (тот же нулевой результат). Я меняю тип int [] на int и отправляю значение, и он отлично работает, но мне нужно отправить int []. – user1166147 21 May 2012 в 01:21
Другие вопросы по тегам:

Похожие вопросы: