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.
- Create the
Notification
object
- 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 {
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)
{
return null;
}
}
public static void RemovePromptNotification(Controller controller)
{
controller.TempData.Remove("PromptNotification");
}
UserController.cs //set
Helper.SetPromptNotification(this, true,
"You will shortly receive an email, please verify your registration.");
MainController.cs //get
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>
}