2013-06-12 3 views
2

Представьте, что у меня есть один контроллер, который регистрирует кого-то, и если он успешно отображает сообщение на другом контроллере.MVC4, передающий сообщения от одного контроллера к другому

[HttpPost] 
    public ActionResult Register(RegisterModel model) 
    { 
     string msg = db.Register(model) 

     // Assuming msg contains "You have been succesfully registered" 
     // How do I display that on the Dashboard view?? 

     return RedirectToAction("Index", "Dashboard"); 
    } 

Какой самый лучший способ передать сообщение или серию сообщений на контроллер Dashboard ??
Даже лучше, если я могу передать список объектов со своими свойствами (что-то вроде obj.Status & & obj.Message)

ответ

2

Вы можете использовать собственность TempData. Это сохранит данные для 1 запроса, чтобы вы могли получить доступ к этому при переадресации.

TempData["MyObject"] = new MyObj 
{ 
    prop1 = "Test", 
    prop2 = "Prop" 
} 

Вы можете обращаться к нему как:

var myObj = TempData["MyObject"] as MyObj; 

ИЛИ

var myObj = (MyObj)TempData["MyObject"]; 

Вы также можете сделать метод расширения:

public MyObj GetMyObj(this TempDataDictionary tmpData) 
{ 
    return (MyObj)tmpData["MyObject"]; 
} 

обращаться к нему так:

var myObj = TempData.GetMyObj(); 
+0

ОК, я думал, что TempData находится между текущим контроллером и только соответствующим видом. Хорошо знать .... –

1

Они рекомендуют использовать словарь TempData для этой цели.

[HttpPost] 
public ActionResult Register(RegisterModel model) 
{ 
    string msg = db.Register(model) 

    TempData["Message"] = "You are registered!"; 

    return RedirectToAction("Index", "Dashboard"); 
} 

TempData может быть использован в качестве ViewData, но internaly он живет в сессии, а сам MVC заботится об очистке его после одного редиректа.

Только вещь - если вы используете веб-фермы (более чем один веб-сервер), вам нужно будет настроить их должным образом использовать то же хранилище (обычно база данных)

Есть также обсуждение в this question

+0

Great ..thanks. –

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