Передача объекта в RedirectToAction
Я хочу передать объект в RedirectToAction. Это мой код:
RouteValueDictionary dict = new RouteValueDictionary();
dict.Add("searchJob", searchJob);
return RedirectToAction("SearchJob", "SearchJob", dict);
где searchJob - это экземпляр SearchJob. Но я не получаю данные о методе действия SearchJob. Вместо этого я получаю строку запроса searchJob = Entity.SearchJob. Пожалуйста, помогите мне. Что я делаю неправильно?
4 ответа
Вы не можете передавать классы таким перенаправленным действиям. Перенаправление осуществляется с помощью 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 name
}
Таким образом, вы получите более удобный для пользователя и http дружественный URL, а с точки зрения Action он получит все необходимые параметры извне. Это лучше для тестирования, обслуживания и т. Д.
Вы можете попробовать:
return RedirectToAction("SearchJob", "SearchJob", new RouteValueDictionary(searchJob)
Проходя searchJob
возражать в RouteValueDictionary
Конструктор будет разлагать searchJob
объект и передать каждое свойство SearchJob
класс как значение маршрута верхнего уровня.
В связывателе модели по умолчанию действие определяется как:
public ActionResult SearchJob(SearchJob searchJob)
Получит полностью повторно гидратированный SearchJob
объект.
Вы не можете передавать классы в метод RedirectToAction, если вы хотите передать весь объект в строке запроса или через POST, вы можете сериализовать объект, используя XML или JSON, и десериализовать объект в контроллере-получателе. Если вы используете этот подход, будьте осторожны с сериализованным размером объекта.
Попробуйте использовать межстраничную публикацию, вы можете определить тип страницы Prevoiuse и использовать его в качестве объекта.