首页 > 代码库 > MVC使用TempData跨控制器传递信息而无需记住key的名称

MVC使用TempData跨控制器传递信息而无需记住key的名称

通常情况下,使用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";
}

<h2>Index</h2>

@Html.ActionLink("看看TestController那边是否放假了","Index","Test")

1


在TestController中,获取TempData存储的信息:

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();
        }
    }
}


Test/Index.cshtml视图:

@using MvcApplication1.Models
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Test</h2>

@if (ViewData["t"] != null)
{
    Notification notification = new Notification()
    {
        IsShow = (bool)ViewData["t"],
        Content = ViewData["c"] as string
    };

    if (notification.IsShow)
    {
        @notification.Content
    }
    else
    {
        @: 有通知,但未发布
    }
}
else
{
  @: 暂无通知
}

2