本文大致讲解mvc前后端的传值方式,包括control向view、view向control、以及action向action。
- 一.经典回顾
- 二、Controller向View传值
- 1. ViewBag
- 2. ViewData
- 3. TempData
- 4. Model
- 三、View向Controller传值
- 1. 使用
Html.BeginForm(...)
方法提交表单 - 2. 使用
Html.BeginRouteForm(...)
方法提交表单 - 3. 传统Form表单的Action属性提交
- 4. 使用Ajax方式提交表单, Ajax.BeginForm(...)
- 5. Jquery和Ajax提交表单
- 6. 表单参数传递
- 1. 使用
- 四、Controller向Controller传值(Action之间传值)
- 1. RedirectToAction
- 五、与WebForms传值的对比
- 六、MVC 向页面传值方式总结
- control控制器
- 1.使用ViewData
- 2.使用ViewBag
- ViewBag、ViewData 和 TempData 的区别:
- ViewBag
- ViewData
- TempData
- 向强类型试图传递model
一.经典回顾
我们回顾下在ASP.NET WebForms中,页面之间最常用的传值方式,有以下几种:
- a). QueryString(也叫URL传值)
- b). Session
- c). Cookie
- d). Application
- e). Server.Transfer
这里不再讲述这几种传值方式的用法和利弊,在本章后面将用MVC的传值方式与之对比,并展开一些探讨。(webform传值请看其他章节)
二、Controller向View传值
可以通过viewbag、viewdata、TempData、model。
1. ViewBag
用法:
在Controller中书写
ViewBag.Test123 = "Hello World.";
前台接收
@ViewBag.Test123
说明: ViewBag是dynamic动态类型,上面例子中的key => Test123可以指定任何类型
2. ViewData
用法:
在Controller中书写
ViewData["Test123"] = "Hello World. This is ViewData";
前台接收
@ViewData["Test123"]
说明:ViewData是字典类型,继承自IDictionary
3. TempData
用法:
在Controller中书写
TempData["tmpData"] = "I am TempData...";
前台接收
@TempData["tmpData"]
说明:TempData也是字典类型,继承自IDictionary
4. Model
这是初学者最常使用的传值方式。在上一篇文章中, 我们在Razor视图的页面代码中有这样一句:
@model IEnumerable
然后我们的信息列表是这样:
@foreach (var item in Model) {
@Html.DisplayFor(p => item.UserName)
@(item.Sex == 0 ? "女" : "男")
@Html.DisplayFor(p => item.Age)
@Html.DisplayFor(p => item.Dept)
@Html.ActionLink("编辑", "Edit", "UserInfo", new { id=item.UserID.ToString() },null) @Html.ActionLink("删除", "Delete", "UserInfo", new { id = item.UserID.ToString() }, new { onclick="return confirm('确认删除"+item.UserName+"的记录?');" })
}
如代码所示,因为我们的Model是一个泛型集合,这里就可以很方便的取出集合中的数据。
在后台Controller中,是怎么书写的呢?
public ActionResult Index()
{
return View("UserInfo", GetTestData());//GetTestData()返回泛型集合
}
如代码所示,只需返回视图时,同时指定视图的数据对象。
三、View向Controller传值
1. 使用Html.BeginForm(...)
方法提交表单
@using(Html.BeginForm("actionName","controllerName"))
{
表单内容
...
}
说明:将