zoukankan      html  css  js  c++  java
  • .NET Mvc中ViewBag、ViewData、TempData如何使用

    对于我初学者来说,Mvc有很多都是我所迷惑的,也是我了解后所痴迷的。废话不多说,来谈谈我今天对Mvc这几个常用的对象的理解吧,这里面只简明概要叙述

    ViewBag   获取动态视图数据字典      作用:给视图传递数据,不需要转换类型,由系统动态解析,比ViewData执行性能要差

    ViewData    获取或设置视图数据的字典            给视图传递数据,需要转换成相应的类型,编写没有ViewBag方便,可读性强

    TempData     临时数据的字典             给控制器或视图传递数据,需要和ViewData一样进行类型转换,可以在多个控制器或页面传值,但是只能读取一次就为null了

    后台代码

       //
            // GET: /CommonStudy/
    
            public ActionResult Index()
            {
                var model = Sxy.BLL.CradInfo.GetList("", "");
    
                this.ViewBag.SecondModelList = model.ToList();
                //自定义数据
                this.ViewData["ThirdModel"] = model.FirstOrDefault();
                //缓存,在下一个控制器可以取到当前的数据,但是只能去一次就释放了
                this.TempData["IndexCache"] = model.ToList();
    
                //只能被取一次,不管是视图使用还是控制器使用,只要其中一个使用了,当前临时缓存就为null了
                this.TempData["Temp"] = "设置一个缓存";
    
                return View(model);
            }
    
    
            //
            // GET: /CommonStudy/Create
    
            public ActionResult Create()
            {
                //获取IndexCache
                var tempData = this.TempData["IndexCache"];
                //转换成实例象
                var model = tempData as List<Sxy.Model.CradInfo>;
                var tempData2 = this.TempData["IndexCache"];
                //在当前控制存储,给后面一个控制器使用
                this.TempData["CreateCache"] = tempData2;
    
                //由于前面视图有使用到了这个临时缓存,现在已取不到了
                var temp = this.TempData["Temp"];
    
                return View();
            }
    
      //
            // POST: /CommonStudy/Create
    
            [HttpPost]
            public ActionResult Create(Sxy.Model.CradInfo model)
            {
                try
                {
                    // TODO: Add insert logic here
                    var tempData2 = this.TempData["IndexCache"];
                    var createCache = this.TempData["CreateCache"];
                    if (ModelState.IsValid)
                    {
                        if (Sxy.BLL.CradInfo.Add(model) > 0)
                        {
    
                        }
                    }
    
    
                    return RedirectToAction("Index");
                }
                catch
                {
                    return View();
                }
            }

    前台代码

    @model IEnumerable<Sxy.Model.CradInfo>
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    
    <p>
        @Html.ActionLink("Create New", "Create")
        @*临时数据*@
        @this.TempData["Temp"]
    
    </p>
    <table>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.userId)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.carNumber)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.carQueryPassword)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.createTime)
            </th>
            <th></th>
        </tr>
        @*默认返回的Model*@
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.userId)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.carNumber)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.carQueryPassword)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.createTime)
                </td>
                <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.id }) |
                @Html.ActionLink("Details", "Details", new { id = item.id }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.id })
                </td>
            </tr>
        }
    
        <tr>
            <td colspan="5">
                <hr />
            </td>
    
        </tr>
        @*自定义ViewData*@
        @foreach (var item in ViewData["SecondModelList"] as List<Sxy.Model.CradInfo>)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.userId)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.carNumber)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.carQueryPassword)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.createTime)
                </td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id = item.id }) |
                @Html.ActionLink("Details", "Details", new { id = item.id }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.id })
                </td>
            </tr>
        }
    
        <tr>
            <td style=" auto">
                <hr />
            </td>
    
        </tr>
    
    
        @{ var ThirdModel = ViewData["ThirdModel"] as Sxy.Model.CradInfo;
            <tr>
    
                <td>
                    @Html.DisplayFor(modelItem => ThirdModel.userId)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => ThirdModel.carNumber)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => ThirdModel.carQueryPassword)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => ThirdModel.createTime)
                </td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id = ThirdModel.id }) |
                @Html.ActionLink("Details", "Details", new { id = ThirdModel.id }) |
                @Html.ActionLink("Delete", "Delete", new { id = ThirdModel.id })
                </td>
            </tr>
            
        }
    
    
    
    </table>
  • 相关阅读:
    如何理解和计算活跃度。做了张脑图。欢迎大家提意见
    在虚拟服务器调试castle项目
    生成缩略图
    自己写的分页函数
    asp.net2.0 自带的邮件发送
    在.NET下如何用WebService实现身份认证,及如何跟踪用户的访问,如类似Possport的功能,不会还是用Session吧?
    邮箱验证
    ASP.NET菜鸟之路之Request小例子
    ASP.NET菜鸟之路之Seesion小例子
    ASP.NET菜鸟之路之Response小例子
  • 原文地址:https://www.cnblogs.com/shexunyu/p/3901312.html
Copyright © 2011-2022 走看看