Let's go

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. 引号需要单独处理,因为引号需要变成转义字符(\")但是实际在前台显示时确是(")

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

 

posted @ 2018-07-11 11:22  chenze  阅读(162)  评论(0编辑  收藏  举报
有事您Q我