Click here to Skip to main content
Click here to Skip to main content

Tagged as

Using TempData Outside the Controller in ASP.NET MVC

, 1 Jun 2014
Rate this:
Please Sign up or sign in to vote.
Using TempData outside the controller in ASP.NET MVC and making TempData less prone to error and more intuitive.

What is the Problem We Are Trying to Fix?

When you start using Tempdata, it quickly becomes evident that maintaining it will be quite a challenge because Intellisense doesn't support Tempdata since it's a Dictionary. Without intellisense, suddenly life looks gloomy, but no fear. There is hope!

My Problem

The problem raised when I wanted to use Notification Object across my website. I wanted to throw this object from one controller to the other (tempdata job) and finally send it to the view. If I wanted to use TempData["something"], then I have to remember this "something".

So instead of hardcoding this "something" inside the controller, I decided to put the hardcoding inside a Helper.cs function and simply call intuitive functions that will Get/Set/Remove the object. The beauty of it is that - there is Intellisense to help us out!

Solution

The solution is quite simple.

  1. Create the Notification object
  2. Create a helper function that will do the dirty work (get;set;remove)

Since we moved TempData outside the controller, we are obliged to send the controller to be able to use the TempData. We send the controller by the keyword this.

PromptNotification.cs

public class PromptNotification //Notification Object
{
    public bool NotificationSuccess { get; set; }
    public string NotificationMessage { get; set; }
}

Helper.cs

public static void SetPromptNotification(Controller controller, bool success,string message)
{
    PromptNotification promptNotification = new PromptNotification
    {
        NotificationSuccess = success,
        NotificationMessage = message
    };
    controller.TempData["PromptNotification"] = promptNotification;
}

public static PromptNotification GetPromptNotification(Controller controller)
{
    try
    {
        PromptNotification promptNotification = controller.TempData["PromptNotification"] 
            as PromptNotification;
        return promptNotification;
     }
     catch (Exception ex)
     {
         // log error here

         return null;
     }
}

public static void RemovePromptNotification(Controller controller)
{
    controller.TempData.Remove("PromptNotification");
}

UserController.cs //set

// add promp message => redirect to index
Helper.SetPromptNotification(this, true, 
    "You will shortly receive an email, please verify your registration.");

MainController.cs //get

// get promptnotification => if it exist => pass it to the view => clear the notification
PromptNotification promptNotification = Helper.GetPromptNotification(this);

if (promptNotification != null)
{
    ViewBag.NotificationSuccess = promptNotification.NotificationSuccess;
    ViewBag.NotificationMessage = promptNotification.NotificationMessage;

    Helper.RemovePromptNotification(this);
}

Index.cshtml

@if (ViewBag.NotificationSuccess != null)
{
    PromptNotification promptNotification = new PromptNotification
    {
        NotificationSuccess = (bool)ViewBag.NotificationSuccess,
        NotificationMessage = ViewBag.NotificationMessage as string
    };
    
    string notificationClassName = String.Empty;

    if (promptNotification.NotificationSuccess == true)
    {
        notificationClassName = "notificationSuccessWrapper";
    }
    else
    {
        notificationClassName = "notificationErrorWrapper";
    }
    
    <div class="@Html.Raw(notificationClassName)">
        @promptNotification.NotificationMessage
    </div>
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

rtp4
Web Developer Multi-Sens
Lebanon Lebanon
I have been web developing for about 2 years now.
Am currently working at Multi-Sens.
Before that I worked as a Php developer.

Comments and Discussions

 
Questionno Pinmemberasobreiro8-Aug-14 4:33 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web03 | 2.8.140827.1 | Last Updated 2 Jun 2014
Article Copyright 2014 by rtp4
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid