• 控制层与视图层传数据


     一、控制器传到视图

    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();

  • 相关阅读:
    一本通1281:最长上升子序列 暨 LIS DP求解
    STL初步
    【洛谷P3369】【模板】普通平衡树
    【洛谷P4859】已经没有什么好害怕的了
    【CF961G】Partitions
    【洛谷P4718】【模板】Pollard-Rho算法
    【LOJ#143】质数判定
    【CF917D】Stranger Trees
    【洛谷P3700】小Q的表格
    【洛谷P4245】【模板】任意模数多项式乘法
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/12326808.html
Copyright © 2020-2023  润新知