控制器之前的数据传递一般使用 TempData。下面以一个例子来展示:
前端程序设计
建立两个控制器,Home控制器和Test控制器。
建立两个Html页面,一个位于Home文件夹下的Index.cshtml,一个位于Test文件夹下的Index.cshtml,代码如下:
Home下的:Index.cshtml,用来做数据提交。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
这是Home控制器的视图1。
@using (Html.BeginForm("Index","Home",FormMethod.Post))
{
<p >姓名:@Html.TextBox("name", null)</p>
<p >年龄:@Html.TextBox("age", null)</p>
<p><input type="submit" value="提交" /></p>
}
</div>
</body>
</html>
Test下的:Index.cshtml,用来做数据完成传递以后的展示。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Test控制器下的1号视图</title>
</head>
<body>
<div>
这是Test控制器的1号视图。
<p>姓名:@ViewBag.person.Name</p>
<p>年级:@ViewBag.person.Age</p>
</div>
</body>
</html>
后台代码设计
路由器的配置:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Home控制器代码:Home控制器中有两个方法,程序通过路由配置进入执行Home/Index,进入初始页面,数据通过表单提交以后通过类的封装保存在TempData中,然后跳转到Test控制器下的Index页面。
namespace TempDataDemo.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(string name,int? age)
{
//接受提交的数据
Person person = new Person()
{
Name = name,
Age = age,
};
TempData["person"] = person;
return RedirectToAction("Index","Test");
}
}
}
Test控制器的代码:定义person实体类来取得保存后的数据,然后通过ViewBag.person把从控制器Home获取来的数据传递到Test控制器下的Index页面显示。
namespace TempDataDemo.Controllers
{
public class TestController : Controller
{
// GET: Test
public ActionResult Index()
{
Person person = (Person)TempData["person"];
ViewBag.person = person;
return View();
}
}
}
效果
初始页面:
提交后显示的页面:
数据通过TempData完成从控制器Home到控制器Test的传递,并且在test的html页面上显示数据。