MVC3 Razor – using viewbag in controller and view

asp.net-mvc-3viewbag

I am trying to create dynamic properties for my viewbag based on an if/else condition in my controller. What the viewbag displays will depend on my logic in the controller. In my view I try to call my viewbag with razor syntax but nothing renders to the page.

[HttpPost]
        public ActionResult EditUser(vw_UserManager_Model edituser)
        {
            UserManager.Models.vw_UserManager_Model model = edituser; 
            int outcome = 0;
                outcome = UserManager.DAL.EditUser(model);
                if (outcome == 1)
                {
                    ViewBag.Message = "Successfully edited user" + model.UserName;
                    ViewBag.Description = "Look below for full details.";
                    //ViewData["Message"] = "Successfully edited user" + model.UserName;
                    return RedirectToAction("showSuccess", model);
                }
                else
                {
                    ViewBag.Message = "Failure";
                    return RedirectToAction("showFailure", model);
                }
        }

#region successErrorHandling
        public ActionResult showError(List<string> ErrorMessage)
        {
            ViewBag.ErrorMessage = ErrorMessage[0];
            return View("ErrorMessageView");
        }

        public ActionResult showSuccess(vw_UserManager_Model model)
        {

            return View("SuccessMessageeView", model);
        }

I set two properties for viewbag, message and description. I do a redirect if successful or failure.

@model UserManager.Models.vw_UserManager_Model
<h2>@ViewBag.Message</h2>
<br />
<h4>@ViewBag.Description</h4>
<h2>
    SuccessMessageeView</h2>
<br />
User Created:
@using (Html.BeginForm())
{
    <ul>
        <li> <b>@Html.Label("Username:  ")</b>@Model.UserName</li>
        <li> <b>@Html.Label("Salutation:  ")</b>@Model.salutation</li>
        <li> <b>@Html.Label("Firstname:  ")</b>@Model.firstname</li>
        <li>  <b>@Html.Label("Lastname:  ")</b>@Model.lastname</li>
        <li> <b>@Html.Label("Email:  ")</b>@Model.email</li>
        <li> <b>@Html.Label("Group name:  ")</b>@Model.group_name</li>
        <li> <b>@Html.Label("Is active:  ")</b>@Model.isactive</li>
    </ul>
}

In my view I then call my viewbag but it doesn't render. Am I doing this incorrectly?

Best Answer

As Hari mentioned, because you are redirecting, you lose the viewbag data. If you want to persist data between requests, use TempData instead. This blog describes what TempData should be used for.