zoukankan      html  css  js  c++  java
  • MVC学习二:Controller和View关系

    控制器(Controller)主要是定义方法和加载视图(View)

    1.控制器中的Action方法返回值的类型ActionResult,string

    2.控制器中Action方法接收浏览器参数方式:

    2.1.通过 URL路由中配置的同名参数 --url: "{controller}/{action}/{id}",//Stu/Del/1

    public ActionResult Del01(int id)
    

    2.2.通过 Request.Form/Request.QueryString

        [HttpPost]
            public ActionResult Modify()
            {
                //model.Id
                //model.Name
                Request.Form["Name"]
    
                return Redirect("/stu/index");
            }     
        [HttpGet]
            public ActionResult Modify()
            {
                //model.Id
                //model.Name
                Request.QueryString["Name"]
    
                return Redirect("/stu/index");
            }     

    2.3.通过 FormCollection 

            public ActionResult Modify2(FormCollection from)
            { 
                //from["Name"]
                return null;
            }  
    

    2.4.通过 模型绑定 --View中所有空间的名称必须和模型中属性名一致,一般是post过来的才能接收

            [HttpPost]
            /// <summary>
            /// 3.2修改 - 执行修改
            /// </summary>
            /// <param name="model"></param>
            /// <returns></returns>
            public ActionResult Modify(Models.Student model)//模型绑定:.NetMVC框架会在调用action方法前,创建 参数model对象,并从请求报文中检查看是否有与该对象属性同名的 数据,如果有,则 设置给 该对象同名的属性
            {
                DbEntityEntry entry = db.Entry<Models.Student>(model);
                entry.State = System.Data.EntityState.Unchanged;
                entry.Property("Name").IsModified = true;
                entry.Property("CId").IsModified = true;
                db.SaveChanges();
    
                return Redirect("/stu/index");
            }     
    

    视图加载方式:

    //--------------------------------------2.0 加载指定视图-----------------------------------
            public ViewResult LoadViewBySelf()
            {
                return View();
                //1.0 通过指定 视图名 加载 指定的视图:此视图 必须在 当前控制器同名 的文件夹中
                //return View("LoadTarget");
                //2.0 通过指定 视图路径 加载指定的视图:基于根目录
                return View("~/Views/Home/List.cshtml");
            }
    

    控制器向View传递数据

    1.控制器类对象创建视图类对象,并把控制器类中的属性ViewBag、ViewData、TempData、Model值赋值给视图类对象的属性ViewBag、ViewData、TempData、Model

    1.1.用户访问一个MVC应用程序 例如地址 Home/Index

    1.2.服务器通过路由表解析URL,实例化对应的控制器类并调用Action方法(Index),返回ActionResult对象。

    1.3.ActionResult对象的ExcuteResult方法就会创建对应的视图类对象(Index_cshtml),通过控制器对象中的ViewBag、ViewData、TempData、Model属性值赋值给View对象中对应的ViewBag、ViewData、TempData、Model。

    1.4.调用View对象中Excute方法生成HTML

    具体事例:

    用户请求 Home/Index
    
    控制器类 home=new 控制器();
    
    ActionResult ar=home.Index();
    
    ar.ExcuteResult();--创建对应的视图对象 Index_cshtml view=new Index_cshtml();
                                         view.ViewBag = home.ViewBag;
                                         view.ViewData = home.ViewData;
                                                     .....
                                         view.Excute();
    

      

    2.ViewBag、ViewData在视图类对象中互相共享的

    3.Model是ViewData的Model属性

            public ViewResult TransData()
            {
                ////动态数据类型,类似与JS里的对象。
                ////但是因为 此种对象是在运行时才知道对象的类型,所以编译器和VS都无法推断并产生 智能提示
                //dynamic obj = new object();
                //dynamic Cla = new ClaController();
                //dynamic num = 1;
                ////动态数据类型 可以动态 添加属性
                //obj.AA = 123;
                //int a = obj.AA;
    
                //3.1 ViewBag
                ViewBag.GzItcast = "广州传智播客~~~!";
                //3.2 ViewData
                ViewData["HnItcast"] = "湖南传智播客~~~!";
                //3.3 TempData
                TempData["USAItcast"] = "美国传智播客~~~!";
                //3.4 Model
                Models.Class modelClass = new Models.Class() { CName="德国传智播客~~!" };
    
                ViewData.Model = modelClass;//return View(modelClass)就是把modelClass赋值给控制器对象ViewData属性的Model属性
                return View();
            }
    

    Views

    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>TransData</title>
    </head>
    <body>
        <div>
            @ViewBag.GzItcast <br />
            @ViewData["HnItcast"] <br />
    
            @ViewBag.HnItcast <br />
            @ViewData["GzItcast"]<br />
    
            @TempData["USAItcast"]<br />
    
            @Model.CName<br />
    
            @ViewData.Model.CName
        </div>
    </body>
    </html>
    

      

  • 相关阅读:
    使用C++11实现线程池的两种方法
    二分查找算法的几种实现
    UNP多线程编程技巧简单总结
    使用带外数据设置 C/S 心跳机制
    无法修正错误,因为您要求某些软件包保持现状
    2012.12-操作系统-吕晓鑫-计算机操作系统综述
    2013.03-多核操作系统-梁荣晓-多核操作系统发展综述
    2011.09-多核操作系统-李彦冬-多核操作系统发展综述
    Simultaneous Multithreading: Maximizing On-Chip Parallelism(精读)
    Simultaneous Multithreading: Maximizing On-Chip Parallelism(泛读)
  • 原文地址:https://www.cnblogs.com/WarBlog/p/7127574.html
Copyright © 2011-2022 走看看