zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    (转)CKEditor+CKFinder 配置
    asp.net一个带抽象工厂的三层架构完整实例
    windows phone 8 手机存储卡数据
    c#常用算法
    mvvm 事件命令
    windows phone 8 语音识别1
    windows phone 8 分辨率
    PHP通用防注入安全代码《转》
    SQL查询语句使用详解《转》
    PHP中文件包含语句的区别《转》
  • 原文地址:https://www.cnblogs.com/darrenji/p/3764290.html
Copyright © 2011-2022 走看看