MVC-控制器之間的資料傳遞
阿新 • • 發佈:2020-12-26
MVC-控制器之間的資料傳遞
控制器之前的資料傳遞一般使用 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頁面上顯示資料。