zoukankan      html  css  js  c++  java
  • 译:什么是ViewData的, ViewBag和TempData?

    译文出处:http://www.codeproject.com/Articles/476967/WhatplusisplusViewData-cplusViewBagplusandplusTem

    ASP.NET MVC提供3种选择ViewData,ViewBag,TempData来从controller到View及后续请求传输数据。

    ViewData和ViewBag很相似,而TempData有所不同。

    让我们来讨论或总结三者的要点:

    ViewBag 和 ViewData的区别:

    1. ViewData 是一个字典对象,从ViewDataDictionary 类继承,已string(字符串)作为键来访问对象。
    2. ViewBag 是一个动态属性,是c#4.0新增的优秀的动态特性。
    3. ViewData 需要进行数据类型转换,判断书否为null值来防止出错。

          4.ViewBag 不需要类型转换。

    ViewBag & ViewData 的例子:

    public ActionResult Index()
    {
        ViewBag.Name = "Monjurul Habib";
        return View();
    }
    public ActionResult Index()
    {
        ViewData["Name"] = "Monjurul Habib";
        return View();
    }

    在视图中:

    @ViewBag.Name 
    @ViewData["Name"]

    TempData:

    TempData也是一个字典类型,从TempDataDictionary类继承而来。存储在短暂的会话中。键 为string类型,值为object类型。

    所不同的是对象的生命周期。TempData色生命周期是一个http请求的时间。意思就是从一个页面跳转到另一个页面的时间。保持302/303的重新定向因为他们是在同一个请求中。

    当你从一个control到另一个control或一个page到另一个page之间跳转的时候帮你保存数据。它内部使用了会话(session)机制。主要用在从一个页面跳到另外一个页面期间来存储数据。

    需要进行数据类型转换,检查是否为null来规避错误。通常用于存储一个时间信息,错误信息或验证信息。

    public ActionResult Index()
    {
      var model = new Review()
                {
                    Body = "Start",
                    Rating=5
                };
        TempData["ModelName"] = model;
        return RedirectToAction("About");
    }
    <pre><pre lang="cs">public ActionResult About()
    {
        var model= TempData["ModelName"];
        return View(model);
    }

    最后一个机制就是Session,工作方式就像viewdata,字典类型等键值方式,键一般为string类型,值可以是object类型。这种方式,是把数据存储在客户端的cookie里,可以保存较长的一段时间。也需要进行行验证,但是没有安全保障。关于ViewData 和viewbag你需要在程序中较灵活的应运。因为每一个页面的动作都贯穿asp.net 整个生命周期。你可以在子页面中使用viewdata/viewbag,但是要细心,你是不是用它来填充无关的数据,会污染你的控制器。

  • 相关阅读:
    小程序中template的用法
    小程序弹窗的几种形式
    js怎样截取以'-'分割的字符串
    js怎样截取字符串后几位以及截取字符串前几位
    局域网聊天软件项目小结(1)
    IPAddress类
    Combobox 成员添加
    tcpclient 类
    console.read()读入的内容
    技术带来的进步与退步---一点点反思
  • 原文地址:https://www.cnblogs.com/yplong/p/4268006.html
Copyright © 2011-2022 走看看