2016-02-25 6 views
-1

Мне нужно отправить сообщение от контроллера 1 на контроллер 3 и, наконец, отправить на просмотр.
контроллер 1Пропустить сообщение Ч/Б Контроллеры для просмотра страницы после выхода из системы

public ActionResult controller1() 
{ 
    TempData["data"] = "work finish."; 
    return RedirectToAction("logoff"); 
} 

Затем в контроллере 2

public ActionResult logoff() 
    { 
     AuthenticationManager.SignOut(); 
     Session.Abandon(); 
     return RedirectToAction("index"); 
    } 

Контроллер 3

public ActionResult index() 
    { 
     ViewBag.data = TempData["data"] as string; 
     return View(); 
    } 

В окне просмотра страницы

<span>@ViewBag.data</span> 

возвращение пустой Сообщ е. Спасибо заранее.

+0

'TempData' использует' Session'. Переместите 'ViewBag.data = TempData [" data "] как строку;' строка, прежде чем уничтожить 'Session' –

ответ

-2

В этом случае следует избегать TempData. Если вы знаете, что вам понадобится значение более чем в одном действии контроллера, то TempData не для вас, потому что он будет удален после его доступа (отказ от ответственности: если вы используете Peek(), он будет сохранен, но это не обсуждение) ,

Я думаю, что для вас может быть перенаправление с параметром в вашем URL-адресе в соответствии с результатом операции. Вы можете сделать что-то вроде этого:

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
{ 
    var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 
    switch (result) 
    { 
     case SignInStatus.Success:      
      TempData["data"] = "Login Success"; 
      return RedirectToAction("Action", new { loginSuccessful = true }); 
     default: 
      ModelState.AddModelError("", "Invalid login attempt."); 
      return View(model); 
    } 
} 

Тогда в controller2 вы бы иметь свой код, как это:

public class SampleController : Controller 
{ 
    public SampleController() 
    { 

    } 

    public ActionResult Index(bool loginSuccessful) 
    { 
     if (loginSuccessful) 
     { 
      ViewBag["message"] = "Login successful"; 
     } 
     return View(); 
    } 
} 

Если какие-либо другие действия контроллера необходимо этот параметр вы просто добавить его к функции подписи, как я в действии Index, и он будет работать до тех пор, пока параметр все еще находится в URL-адресе.

+0

, пожалуйста, правильно прочитайте мой вопрос – anand

+0

@anand Может быть, я не получу его достаточно хорошо. Если вы еще можете объяснить, это было бы здорово. Я думаю, что мой ответ охватывает то, о чем вы спрашиваете, как объясняется. Если я могу помочь, дайте мне знать. –

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

  • Нет связанных вопросов^_^