1、ViewBag
2、ViewData
3、TempData
4、Model
1、ViewBag
Controller:ViewBag.变量名
View:直接使用@ViewBag.变量名
举例子:
ViewBag.wulala="hello";//什么类型都可以
<p>@ViewBag.wulala</p>
2、ViewData
Controller:ViewData["key"]=value;
View:直接使用@ViewData["key"]
以上两种传值方式的前提是在同一个控制器下页面之间传值
3、TempData
他可以跨控制器传值,但是它具有一次性,也就是读完一次就消失了
Controller:TempData["key"]=value;
View:直接使用@TempData["key"]
例如: 当前在Home控制器下,传数据到Article控制器下
return Redirect("~/Article/myTest");//重定向到其他控制器下的页面
4、Model
区别于以上三种,上面三种传多个参数就要写多个xxxx["key"]=value;但是对于比较复杂或者数量比较多的数据,浏览器有时候会拒绝传输,这个时候可以传对象
比如我传一个user信息到前端:
public ActionResult ShowContext(int id)
{
User u=new User(id,name,age,sex,phone,address,.....)
return View(u);
}
前段接受并使用:
//先声明接收的model的类型
@model 项目名字.Models.类名
//使用
<p>名字:@Model.name</p>
<p>年龄:@Model.age</p>
再举一个传递一个list<>的例子
public ActionResult ShowContext(int id)
{
List<works> workList = new List<works>();
workList = Op_Works.FindArticleByFlag(id);
return View(workList);
}
前端接收并使用
@model List<ProtectAnimal.Models.works> //@model List<类型>
@foreach (var w in Model)//遍历list的每一个对象
{
<article class="post">
<header>
<div class="title">
<h2><a href="#">@w.Title</a></h2>
<p>@w.CoreSentence</p>
</div>
<div class="meta">
<a href="#" class="author"><img src="../../Content/images/avatar.jpg" alt="" /></a>
<span>@Html.ActionLink(@w.author, "CatAuthorArt", new { uid = w.Uid })</span>
</div>
</header>
<div class="setimage">
<a href="#" class="image featured"><img src=@w.Image alt="" /></a>
</div>
<br />
<p class="overline1">@w.Context</p>
</article>
}