Использование RedirectToAction с параметром пользовательского типа - PullRequest
3 голосов
/ 24 февраля 2011

asp.net mvc 2

У меня есть это действие в Identity controller

public ActionResult Details(string id, MessageUi message)
{

И я пытаюсь перенаправить на это действие с другого контроллера, но я не знаю, как мне передать параметр сообщения

Я пытался с

    var id = "someidvalue"
    var message = new MessageUi("somevalue");
    return RedirectToAction("Details", "Identity", new { id, message});
}

но параметр сообщения нулевой

1 Ответ

8 голосов
/ 24 февраля 2011

Это нормально. Вы не можете передавать сложные объекты в URL при перенаправлении, и именно поэтому объект MessageUi не получен. Только скалярные свойства, которые будут преобразованы в & -разделенные пары ключ / значение в URL.


Одной из возможностей было бы передать все простые свойства этого объекта, чтобы средство связывания модели по умолчанию могло восстановить его в целевом местоположении:

var id = "someidvalue"
var message = new MessageUi("somevalue");
return RedirectToAction("Details", "Identity", new { 
    id = id, 
    MessageProp1 = message.MessageProp1,
    MessageProp2 = message.MessageProp2,
    MessageProp3 = message.MessageProp3,
});

Вы также можете передать только идентификатор сообщения:

var id = "someidvalue";
return RedirectToAction("Details", "Identity", new { 
    id = id, 
    messageId = "somevalue"
});

и восстановить объект сообщения в действии детали с использованием этого идентификатора:

public ActionResult Details(string id, string messageId)
{
    var message = new MessageUi(messageId);
    ...
}

и эта работа может быть в значительной степени выполнена с помощью пользовательского связывателя модели для типа MessageUi.


Другой возможностью будет использование TempData или Session:

var id = "someidvalue";
TempData["message"] = new MessageUi("somevalue");
return RedirectToAction("Details", "Identity", new { id });

и затем внутри действия Подробности:

var message = TempData["message"] as MessageUi;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...