控制器(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>

  

MVC学习二:Controller和View关系的更多相关文章

  1. MVC中从Controller像View层传值

    MVC中的Controller不能直接的訪问View层中的控件,那么是怎样的将Controller中值传到View中,经常使用的有4种 ViewData: 是获取或设置视图的字典对象,它里面存放的是键 ...

  2. MVC学习二:基础语法

    目录 一:重载方法的调用 二:数据的传递 三:生成控件 四:显示加载视图 五:强类型视图 六:@Response.Write() 和 @Html.Raw()区别 七:视图中字符串的输入 八:模板页 一 ...

  3. 【转】ASP.NET MVC学习笔记-Controller的ActionResult

    1. 返回ViewResult public ActionResult Index()   {       ViewData["Message"] = "Welcome ...

  4. MVC 学习系列-Controller

    MVC最核心的也就是Controller了,控制器(controller)在功能中起到了核心功能. 1,)在MVC类库中,根据URL,通过MVCHandler进入MVC处理系统中, 2,)解析初始化对 ...

  5. Thinkphp学习笔记-controller与view绑定

    $this->display(); 通过上面的代码则可以输出controller所对应的view

  6. ASP.NET MVC 四种Controller向View传值方法

    控制器: // Get: Data public ActionResult Index() { //ViewData 方式 ViewData["UserName"] = " ...

  7. angular学习(二):Controller定义总结

    上文中总结完了ng-view的应用,将运维后台分开界面到2个,进行到 逻辑Controller处理中,本文将总结一下在项目中Controller都用到了哪些知识: $scope:作用域对象,仅仅是代表 ...

  8. Spring MVC学习笔记——Controller接口

  9. spring MVC学习(二)---配置相关的东西

    1.在上一节中我们提到过每一个DispatcherServlet都会有一个上下文 (WebApplictionContext),并且继承了这些上下文中的bean,其中以一些"特殊" ...

随机推荐

  1. nodejs初探(一)nodejs开发环境搭建

    简介 JavaScript是一种运行在浏览器的脚本.Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件 ...

  2. nyoj 983 ——首尾相连数组的最大子数组和——————【最大子串和变形】

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首 ...

  3. 深入理解JavaScript系列(28):设计模式之工厂模式

    介绍 与创建型模式类似,工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类. 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类.该模式使一个类的实例化延迟到了子类.而子 ...

  4. Cookie的应用实例

    ASP.NET设置元素CSS属性 1.添加一条CSS规则: control.style.add("CSS名称",“CSS值”); 2.添加Class规则 Control.CSSCl ...

  5. Java判断文件、文件夹是否存在

    在完成工作室任务的时候多次遇到这个问题,这是一个常用的知识点,记录如下: 1.判断文件是否存在,不存在则创建文件 File file=new File("C:\\2.jpg"); ...

  6. c# 文件名排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...

  7. OGNL,表达式上下文ContextMap

    1.OGNL表达式 object graph navigation language:对象图导航语言 存取对象属性:调用对象方法:字段类型转换等. <input type="text& ...

  8. python 中函数

    函数   def 函数名(形参):形参不用在前面定义,局部变量   参数      必须参数            必须以正确的顺序传参      关键字参数        加入关键字后可以不需要正确 ...

  9. The nineteenth day

    Twinkle,twinkle,little start! 闪烁,闪烁,小星星 How I wonder what you are, 我想知道你是什么 Up above the world so hi ...

  10. 转:SQL Server附加数据库提示“版本为661,无法打开,支持655版本……”

    在我们使用别人导出的数据库的时候,有时候我们会通过附加数据库的方法,把别人导出的数据库附加到我们的电脑中,这时,或许你会遇到这种问题,附加时,提示版本为XXX,无法打开,支持AAA版本. 这是怎么回事 ...