控制层与视图层传数据

 一、控制器传到视图

1.传字符串

(1)ViewBag

控制器传

        public ActionResult Index()
        {
            //ViewBag后的变量可以是任意,接收时要是相同的名称,可以一次传多个值
            ViewBag.Content = "Hello";
            ViewBag.Name= "Tom";
            return View();
        }            

view收

//@的作用是输出
@ViewBag.Content
@ViewBag.Name

 (2)ViewData

控制器传

            //类似键值对的方式
            ViewData["Age"] = 18;

view收

@ViewData["Age"]

注意:ViewBag和ViewData本质相同,所以也可以用ViewBag传,ViewData收

 

(3) TempData

本质上是一个session。全页面都可以读取,读取一次会消失

@TempData["Age"]

 

2.View

(1)传一个对象

控制器传

    public class HomeController : Controller
    {
        public ActionResult Index()
        {

            Student stu = new Student() { Age = 10, Name = "Tom" };
            return View(stu);
        }
    }

    public class Student
    {
        public int Age;
        public string Name;
    }

视图收

@Model.Age
@Model.Name

强类型视图

默认情况下视图里的Model用.时是无法弹出提示的,这是如果明确告诉视图用的是哪个Model的话就可以在使用@Model时弹出提示

//后面是定义类时的路径,Blog是项目名
@model Blog.Models.Student

 

(2)使用指定view

        public ActionResult Index()
        {
            return View("Show");
        }

传一个字符串,会跳转到Show.cshtml视图

 默认是Home文件夹的界面,可以指定界面

return View("~/Views/Resume/Show.cshtml");

 

(3)使用模板页

可以使用指定页面的同时,使用模板页

return View("Show", "_Layout1");

 

(4)其他View重载

//指定视图,数据对象
protected internal ViewResult View(string viewName, object model)
//指定视图,指定模板,数据对象
protected internal virtual ViewResult View(string viewName, string masterName, object model)

 

另:模板页也可以直接在视图里设置

 

二、控制器接收数据

控制器使用参数接受数据

 (1)一个参数

 //既可以接收get数据,也可以接收post数据
       public ActionResult Index(string name)
        {
            return Content(name);
        }

get访问控制器

http://localhost:52846/Home/Index?name=tom

post访问

需要表单,,,略

(2)使用Model接收

 当参数值过多时,可以使用对象接收值

        public ActionResult Index(Student stu)
        {
           return Content(stu.Name);
        }

 

校验,待补

if (ModelState.IsValid)
{

}

 model里加上校验特性

 

 

 

  首先action的跳转大致归类:

  1跳转到与当前同一控制器内的action和不同控制器内的action、

  2带有参数的action跳转和不带参数的action跳转。

  3跳转到指定视图,不经过Controller的Action。

  //跳转到当前Controller的指定Action(此处为Index),不带参数。

  一、RedirectToAction("Index");

  //跳转到指定Controller下的指定Action,不带阐述

  二、RedirectToAction(ActionName,ControllerName)

  //使用路由名称和路由值重定向到指定的路由。不带参数。

  三、RedirectToRoute(new {controller="Home",action="Index"});

  //使用路由名称和路由值重定向到指定的路由。带参数。

  四、RedirectToRoute(new {controller="Home",action="Index", id=param});

  //跳转到当前controller下的Action,可带参数。

  五、Response.Redirect("Index?id=1");

  //跳转到当前controller下的Action,不带参数。

  六、return Redirect("Index");

  //跳转到当前路径下的指定View(视图),但不经过Action方法。

  七、return View("Index");

  //跳转到指定路径下的指定View(视图),但不经过Action方法。这种方法是写全路径

  八、return View("~/Views/Home/Index.aspx");

  //跳转到当前Controller,当前Action下的View。 最常见。

  九、return View();

posted @ 2020-02-18 16:37  富坚老贼  阅读(557)  评论(0编辑  收藏  举报