zoukankan      html  css  js  c++  java
  • ViewData丶ViewBag和TempData

    一、使用方法

    案例:

         public ActionResult Index()
            {
                ViewData["num"] = 2;
                ViewData.Add("num2", 2);
    
                ViewBag.myNum = 2;
                TempData["myNum2"] = 2;
    
                Student stu = new Student()
                {
                    id = "123456",
                    name = "张三",
                    sex = ""
                };
                return View(stu);
            }

    页面:

    @*使用Model赋值,需要引入下面的命名空间*@
    @using ViewBag_Data.Models;
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
    </head>
    <body>
        <div> 
            <p>
                Model赋值
                @Model.id
                @Model.name
                @Model.sex
            </p>
            我是ViewData:@((int)(ViewData["num"]) + 1)                                                  <br />
            我是ViewData方式二:@((int)ViewData["num2"] + 1)                                              <br />
            我是ViewBag:@(ViewBag.myNum + 1)                                                            <br />
            我是TempData:@((int)TempData["myNum2"] + 1)                                                 <br />
        </div>
    </body>
    </html>

     ViewData和TempData的区别:

            public ActionResult Test1()
            {
    
                TempData["num"] = "aaaaa";
                ViewData["num"] = "aaaaa";
                return RedirectToAction("Test2");
            }
            public ActionResult Test2()
            {
                string text1 = TempData["num"] as string;
                string text2 = ViewData["num"] as string;
                return View();
            } 

    执行结果:

    ViewData的值已经被清空,而TempData没有被清空,这是它们的区别之一,我们可以用TempData在Controller之间传递数据。

    1、ViewBag和ViewData的生命周期和Action相同(仅对当前View有效),不能跨越请求,用来给View提供数据
    ViewData是使用类似于Dictionary的方式读写:ViewData["uname"]="XXX";
    ViewBag是使用dynamic方式进行读写:ViewBag.uname="XXX";
    2、TempData是保存在Session中的,在本次请求中把数据放到TempData中,在下次请求的时候可以从TempData中读取数据,在下次请求处理结束后就从Session中销毁了。TempData主要从来给下个请求传递不方便放到url或者cookie中的临时数据使用。
     
    二、转化为HTML格式

    我的viewbag存的是html代码,前台页面不解析html,直接转义了html的代码,肯定,是前台或者后台需要转义一下!
    今天再给自己总结一下,关于ViewBag赋值Html格式值,但是在web页显示不正常;
    例如,ViewBag.Content = "<p>你好,我现在测试一个东西.</p>";
    前台页面<div>@VIewBag.Content</div>
    结果在页面上显示:<p>你好,我现在测试一个东西.</p>,通过火狐编辑的时候发现,源码为,&lt;p&gt你好,我现在测试一个东西.&lt;/p&gt
    这样显然不是我们想要的,而且这样对应通过编辑器保存到数据库中的Html格式字段,取出之后不能显示正确的样式;
    在网上翻查一遍找到解决方法

    <div>@Html.Raw(ViewBag.Content)</div>

    这样显示就正常了

    2. 引号需要单独处理,因为引号需要变成转义字符(")但是实际在前台显示时确是(")

    会发生异常,如果是图片是的话将双引号(")替换成单引号(')

    作者:chenze
    出处:https://www.cnblogs.com/chenze-Index/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    三、单例模式
    二、工厂模式
    一、设计模式六大原则
    十二、Spring之IOC容器初始化
    PythonWeb开发教程(二),搭建第一个django项目
    PythonWeb开发教程(一),开发之前需要准备什么
    基于python的性能测试工具–locust
    在成为测试大牛的路上,我推荐BestTest
    移动端自动化测试(一)appium环境搭建
    常用工具篇(二)死链接扫描工具–Xenu
  • 原文地址:https://www.cnblogs.com/chenze-Index/p/9293502.html
Copyright © 2011-2022 走看看