Передача объекта в 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 и использовать ее.