Передача объекта в RedirectToAction

Я хочу передать объект в RedirectToAction. Это мой код:

RouteValueDictionary dict = new RouteValueDictionary();
            dict.Add("searchJob", searchJob);
            return RedirectToAction("SearchJob", "SearchJob", dict);

где searchJob является экземпляром SearchJob. Но я не получаю данные о методе действия SearchJob. Вместо этого я получаю запрос от поискаJob = Entity.SearchJob. Пожалуйста, помогите мне. Что я делаю неправильно?

Ответ 1

Вы не можете передавать классы таким перенаправленным действиям. Перенаправление осуществляется с помощью URL. Url является строкой, поэтому он не может содержать классы (сериализация объектов в URL здесь действительно не логична)

Вместо этого вы можете использовать TempData

TempData["searchJob"] = searchJob;
return RedirectToAction ...;

и в действии перенаправлен

Entity.SearchJob = (Entity.SearchJob)TempData["searchJob"] ;

После выполнения приведенного выше кода TempData больше не будет содержать searchJob. TempData обычно используется для однократного чтения.

Но мне не нравится путь выше. Если бы я был на вашем месте и хотел бы искать работу по названию, я бы добавил параметры маршрута, такие как

RouteValueDictionary dict = new RouteValueDictionary();
dict.Add("searchJobName", searchJob.JobName);

и получить его к действию через параметр

public ActionResult SearchJob(string searchJobName)
{
... do something with the name
}

Таким образом, вы получите более удобный для пользователя и удобный для HTTP URL-адрес, а с точки зрения действия он получит все необходимые параметры извне. Это лучше для тестирования, обслуживания и т.д.

Ответ 2

Вы можете попробовать:

return RedirectToAction("SearchJob", "SearchJob", new RouteValueDictionary(searchJob)

Передача объекта searchJob в конструктор RouteValueDictionary будет разлагать объект searchJob и передавать каждое свойство класса searchJob в качестве значения маршрута верхнего уровня.

При использовании связующего устройства по умолчанию действие определяется как:

public ActionResult SearchJob(SearchJob searchJob)

Получит полностью повторно гидратированный объект searchJob.

Ответ 3

Вы не можете передавать классы методу RedirectToAction, если вы хотите передать весь объект в querystring или через POST, вы можете сериализовать объект с помощью XML или JSON и десериализовать объект в контроллере приемника. Если вы используете этот подход, будьте осторожны с размером сериализованного объекта.

Ответ 4

Попытайтесь использовать Перекрестную проводку, вы можете определить тип страницы Prevoiuse и использовать ее.