2016-06-23 2 views
2

У меня есть тип Filter:Перенаправление к действию и передачи ссылочного типа

public class Filter 
{ 
    public int FilterId { get; set; } 
    public ICollection<int> ModuleIds { get; set; } 
} 

Мне нужно перенаправить к действию и передать instanse этого типа:

public ActionResult Navigate 
{ 
    var filter = new Filter() 
    { 
     FilterId = 5, 
     ModuleIds = new List<int>() { 6 }; 
    } 

    return RedirectToAction("list", "user", filter); 
} 

Вот цель действия:

public ActionResult List(Filter filter) 
{ 
    var filterId = filter.FilterId; // = 5 
    // but filter.ModuleIds.Count = 0 
} 

В результате я получил пусто . Таким образом, существует проблема только с ссылочным типом.

Как передать filter со всеми ссылочными свойствами без использования TempData?

Также я пытался использовать, но никаких результатов

return RedirectToAction("list", "user", new RouteValueDictionary(filter); 

и

return RedirectToAction"list", "user", new { filter = filter}); 
+3

Вы не можете передавать ссылочные типы. Обходным решением будет сохранение значения в Session/TempData или сериализация объекта 'filter' для json, который сделает его типом значения. –

ответ

3

Вы не можете передавать ссылочные типы. Причина в том, что RedirectToAction не сериализует данные, он просто выполняет итерации по свойствам объекта объектов маршрута, строя строку запроса, причем ключи являются именами свойств, а значения представляют собой строковое представление значений свойств. Если вы хотите изменить Url, то использовать TempData, вероятно, самый простой способ сделать это.

+0

Благодарим вас за ответ. Я собираюсь использовать Session, если нет способов передать мой объект – Marusyk

Смежные вопросы