MVC-控制器之间的数据传递

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页面上显示数据。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值