MVC如何进行前后台传值
- 1、使用viewdata
- 2、viewbag
- 3、TempData
- 4、Model
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一样,他也是一个字典型的,存值的时候必须是键值对存入!
不同的是生命周期不一样,viewbag
和viewdata
的生命周期都只有当前页面的控制器(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种前后台的传值方式!!!