通常情况下,使用TempData需要记住key的名称,本篇体验:通过帮助类,实现对TempData的设置、获取、删除。
关于传递信息的类:
namespace MvcApplication1.Models{ public class Notification { public bool IsShow { get; set; } public string Content { get; set; } }}
帮助类,使用TempData对信息处理:
using System;using System.Web.Mvc;using MvcApplication1.Models;namespace MvcApplication1.Extension{ public class NotificationHelper { public static void SetNotification(Controller controller, bool isShow, string content) { Notification notification = new Notification() { IsShow = isShow, Content = content }; controller.TempData["n"] = notification; } public static Notification GetNotification(Controller controller) { try { Notification notification = controller.TempData["n"] as Notification; return notification; } catch (Exception ex) { //TODO:记录日志 return null; } } public static void RemoveNotification(Controller controller) { controller.TempData.Remove("n"); } }}
在HomeController中,把信息放到TempData中:
using System.Web.Mvc;using MvcApplication1.Extension;namespace MvcApplication1.Controllers{ public class HomeController : Controller { public ActionResult Index() { NotificationHelper.SetNotification(this, true, "放假了~~"); return View(); } }}
Home/Index.cshtml视图为:
@{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml";}Index
@Html.ActionLink("看看TestController那边是否放假了","Index","Test")
using System.Web.Mvc;using MvcApplication1.Extension;using MvcApplication1.Models;namespace MvcApplication1.Controllers{ public class TestController : Controller { public ActionResult Index() { Notification notification = NotificationHelper.GetNotification(this); if (notification != null) { ViewData["t"] = notification.IsShow; ViewData["c"] = notification.Content; } return View(); } }}
@using MvcApplication1.Models@{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml";}Test
@if (ViewData["t"] != null){ Notification notification = new Notification() { IsShow = (bool)ViewData["t"], Content = ViewData["c"] as string }; if (notification.IsShow) { @notification.Content } else { @: 有通知,但未发布 }}else{ @: 暂无通知}