MVC常用4种前后台传值方法

1、使用viewdata

ViewData是一个很早就出来的,在mvc2的时候就用的很火热了,首先它是一个字典型的。就是使用的时候存值必须是

张三:1,李四:2

这种形式存值进去,在后台使用的时候:

 public ActionResult Index()
        {
            List<Models.UserInfo> ust = db.UserInfo.ToList();
            ViewData["naxtab"] = ust;
            return View();//返回页面
        }

viewdata前台取值

 @foreach (UserInfo item in ViewData["naxtab"] as List<UserInfo>)
        {
            <div class="da">
                <div> @Html.Encode(item.LoginName)</div>
                <div> @Html.Encode(item.LoginPwd)</div>
                <div><a href="/Index/Delete/@Html.Encode(item.UserID)" onclick="return confirm('确定删除?');">删除</a></div>
            </div>

        }

从上面也是可以看到viewdata的一个麻烦之处,就是必须存什么类型进去,取值的时候就必须强转为什么类型,否则就会报错!

取出来的数据
在这里插入图片描述
这样就是viewdata的一个存取值的流程了,有没有觉得有点复杂?
所以下面就接着退出升级版viewbag了!

2、viewbag

先简单说说下viewbag是个什么东西,viewbag是从mvc3里面才开始引进使用,ViewBag 是动态类型(dynamic),因为具体跟viewdata不同的就是viewdata是键值对类型,在你使用的时候必须强转为类型或数组,但是viewbag是可以直接用的,就算是存入数组,那也是可以直接使用foreach循环打印出来的。
viewbag后台存值

//给viewbag赋值一个集合
public ActionResult Index()
{
    string[] items = new string[] {"张三", "李四", "王二" };
    ViewBag.Items = items;//将items集合的值存入viewbag里面
    return View();//返回页面
}

viewbag前台接收值(数据类型用dynamic或var都可以)

<ul>
@foreach (dynamic p in ViewBag.Items)
{ 
<li>我的viewbag数据: @p</li>
}
</ul>

那么打印出来的数据就是
在这里插入图片描述
上面的方法是传集合时的用法,博主在学校学的时候一般是进行数据库输出数据,然后常用都是viewdata所以我就想试下用viewbag是否也可以,直接上后台

  List<Models.UserInfo> ust = db.UserInfo.ToList();//使用ef框架取得用户表的值
            ViewBag.Items = ust;//将items集合的值存入viewbag里面
            return View();//返回页面

前台(在这里因为后台返回的是键值对,所以下面的p要点你数据库的字段名)

<ul>
            @foreach (dynamic p in ViewBag.Items)
            {
                <li>我的viewdata数据: @p.LoginName</li>
            }
        </ul>

数据
在这里插入图片描述
所以好像感觉并没有什么不一样的地方,反而是比viewdata的用法貌似更简单了。
为此博主专门百度了一下,viewdata是是一个字典型的(Dictionary)。然后viewbag是一个是动态类型(Dynamic),然后viewbag是viewdata后面出来的,可以说是一个升级版,就是在viewdata上加以改进出来的,但是不同的就在于viewdata虽然没有viewbag这么使用方便,但是它的可读性要比viewbag要好,因为就是在viewdata上后台进行转码才有了viewbag,多了一道工序所以影响到了它的可读性。

3、TempData

跟viewdata一样,他也是一个字典型的,存值的时候必须是键值对存入!
不同的是生命周期不一样,viewbagviewdata的生命周期都只有当前页面的控制器(Controller)到页面(view),一旦发生跳转(Redirection),那么它们两个也就不复存在了,但是tempdata的数据是依然有效,最常见用法就是跨页面传值了!

因为tempdata与viewdata用法基本一样,所以这里就不重复写了

4、Model

Model在初学mvc的时候使用比较多,但是后来就觉得不是特别好用,因为一个控制器只能返回一个Model数据,在你一个页面需要返回页面2个以上的表的时候,Model传值也就废了。不过好处就在于,使用是最简单的,适合初学者!
后台

public ActionResult Index()
        {
            List<Models.UserInfo> ust = db.UserInfo.ToList();
            return View(ust);//返回页面
        }

没错,就是如此简单,不用申明不用强转,直接return返回即可!!
前台(使用的时候需要在页面引用项目的Model)

@using webtwo.Models
@*webtwo是我的项目名*@
 @foreach (var item in Model)
        {
            <h2>
                姓名:@Html.Encode(item.LoginName)
                密码:@Html.Encode(item.LoginPwd)
            </h2>
        }

就这样后台的数据就可以直接在前台展示,就是如此简单!!!

所以今天的科普就到这里了,以上就是mvc里面常用的4种前后台的传值方式!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值