zoukankan      html  css  js  c++  java
  • asp.net mvc中ViewData、ViewBag和TempData的详解

    一、ViewData和ViewBag

    1、ViewData和ViewBag都是从Action向View传递数据的方式,当然还有其他方式如向View传递Model。

    2、ViewData页面查询数据时需要转换合适的类型(var std in ViewData["students"] as IList<Student>),ViewBag不需要,他们的使用方法如下:

      1)ViewBag:

        controller中定义ViewBag.name="Tom";

        view中@ViewBag.name

      2)ViewData:

        controller中定义ViewBag["name"]="Tom";

        view中如下   

    <ul>
    @foreach (var std in ViewData["students"] as IList<Student>)
    {
        <li>
            @std.StudentName
        </li>
    }
    </ul>

    3、ViewData和ViewBag都是ControllerBase类的属性,ViewData类型是ViewDataDictionary(字典键值对结构),ViewBag类型是dynamic,如下图:

    4、ViewData和ViewBag本质一样,在ViewData使用的key不能和ViewBag的key相同,否而回报运行时错误,

    http://www.tutorialsteacher.com/mvc/viewbag-in-asp.net-mvc原句:Internally, ViewBag is a wrapper around ViewData. It will throw a runtime exception, if the ViewBag property name matches with the key of ViewData.

    http://www.tutorialsteacher.com/mvc/viewdata-in-asp.net-mvc原句:ViewData and ViewBag both use the same dictionary internally. So you cannot have ViewData Key matches with the property name of ViewBag, otherwise it will throw a runtime exception.

    5、ViewBag和ViewData仅针对当前Action中有效,生命周期和view相同。

    二、TempData


    1、TempData类型是TempDataDictionary。

    2、 TempData用于把数据从一个action方法传到另一个action方法,两个action可以不再同一个controller中如下代码:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            TempData["name"] = "Tom";
            TempData["age"] = 25;
            return View();
        }
    
        public ActionResult About()
        {
            string userName;
            int userAge;        
            if(TempData.ContainsKey("name"]))
                userName = TempData["name"].ToString();
        
            if(TempData.ContainsKey("age"]))
                userAge = int.Parse(TempData["age"].ToString());
    
            return View();
        }
    }

    3、TempData 在第二次请求后会被清空,第三次请求则获取不到,如下:

    第一次请求http://localhost/Home/Index,设置TempData["name"]="Tom";

    第二次请求http://localhost/Home/About,可以获取var name = TempData["name"];

    第三次请求http://localhost/Home/Details,通过var name = TempData["name"];是获取不到值的。

    可以在第二次请求中TempData.Keep();语句来记住TempData["name"],这样第三次就可以继续获取了。

    4、TempData 是使用Session存储数据的。

    参考文章:http://www.tutorialsteacher.com/mvc/asp.net-mvc-tutorials

  • 相关阅读:
    Summarizing NUMA Scheduling两篇文章,解释得不错
    VCAP5-DCA – What’s new?
    NUMA总结。
    NUMA and vNUMA
    NUMA
    vsphere 5.1 性能最佳实践。
    vsphere性能
    mysql的事务,隔离级别和锁
    mysql5.7 生成列 generated column
    mysql8 公用表表达式CTE的使用
  • 原文地址:https://www.cnblogs.com/qk2014/p/5420319.html
Copyright © 2011-2022 走看看