码迷,mamicode.com
首页 > Web开发 > 详细

003.MVC控制器与数据传递

时间:2017-01-20 22:00:48      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:asp.net   指定   辅助   using   需求   动态类型   文件中   on()   配置   

一.控制器基础

什么是控制器?
控制器一般继承自System.Web.Mvc.Controller

Controller类:
1.一个控制器可以包含多个方法(Action:操作/方法)
2.方法从请求中获取输入数据
3.处理及检索或更新数据库中的模型对象
4.方法输出结果,可以是一个视图或一个跳转
5.控制器方法使用传入的参数值执行处理以及检索或更新数据库中的模型对象.然后,会选择一个视图显示

方法响应输出(研究的目的:解决实际问题,实现任意选择视图,任意跳转(重定向))

控制器的方法处理完请求时通常生成一个响应到客户端
大多数方法会返回ActionResult类或其他派生类的实例.
可以返回任意类型(如字符串,整数,布尔值)的对象.
这些返回类型在呈现到响应流之前包装在合适的ActionResult类型中
1.ViewResult,相当于返回一个View页面
2.RedirectResult.跳转到指定的URL

控制器的使用
方法的输出
结论:返回类型ActionResult
return 常用的四个方法
View()
Redirect()
RedirectToAction()
RedirectToRoute()

代码:
public class HomeController : Controller
{
//
// GET: /Home/

public ActionResult Index()
{
//return View();//同一个控制器中和方法名同名的视图
//return View("~/Views/Studeny/Index.cshtml");//不同控制器的视图,很少用
//return View("Index2");//同一个控制器中和方法名不同名的视图

//Redirect("/Studeny/Index");//不同控制器的视图,常用
//RedirectToAction("Index","Studeny")
return RedirectToRoute(new { Controller = "Studeny", action = "Index" });
}

}
研究的目的:解决实际问题
实现任意选择视图,任意跳转(重定向)

return 常用4个方法的比较
结论1:
1>同一控制器不同的视图 View
有时也可进入不同控制器的视图 少用
特点:从控制器中直接进入视图 C>>V
2>不同控制器的视图 最好用Redirect?系列方法
特点:C>>C?F?>>V?
结论2:
进入不同的控制器视图
View C1>>V? 直接回家
Redirect? C1>>C? F?>>V? 去超市 回家
结论3:
Redirect?三个方法基本功能相同.参数的填写风格不同
注意:同一个控制器不同的视图,有时也用Redirect?


练习:定义一个方法,实现
1>进入用户登录页面
2>进入前台受页面
3>进入后台首页面

--------------------------------------------------------------------------------------------------------------------------------
二.ASP.NET MVC应用程序对约定(默认配置)的依赖性很强

-约定简化通讯(提高开发效率)

ASP.NET MVC中的命名:

1.按约定命名.包括以下几项:
a.控制器的命名,必须以"Controller"结尾
如:HomeController,AdminController
b.引用一个控制器时,只需指定前面的名称
如:Home,Admin
c.控制器应该放在Controller目录中
d.视图及部分视图应该放在"View"目录中
如:HomeController对应"/View/Home"
e.布局页应该以"_"开头,放在"/View/Shared"目录

2.自定义

ASP.NET MVC 项目类型
一.
1.空网站模版
文件夹+文件
包含了最少的目录及文件
"使用HTML5语义标记"选项标示这Visual Studio开始支持HTML5标记.
Razor视图引擎是ASP.NET MVC 新增的视图引擎
2.Internet(因特网)模版
文件夹+文件+入口文件
(登录注册功能需要的文件,Form身份验证)
3.Intranet(局域网)模版
文件夹+文件+入口文件
(windows身份验证需要的文件)
应用程序包含了更多的入口文件

_ViewStart.cshtml:视图启动时判断视图用不用母版页
Global.asax :规定了路由
_Layout.cshtml :母版页
Error.cshtml :错误页
Site.css :样式(可以添加或者修改)
二.站点的结构[项目文件夹以及文件的构成]
三.全局配置文件
Global.asax全局配置文件,整个MVC应用程序的路径配置
路由:ASP.NET MVC特有的URL
路由规则(URL模式)=路由规则:
{controller}/{action}/{id}
控制器 操作方法 参数
如何工作:浏览器URL>>框架解析,找到>>控制器和方法

--------------------------------------------------------------------------------------------------------------------------------
三.在方法与视图间传递数据

方法的向视图传值

两种方法:

方法一:ViewBag/ViewData
方法二:Model(模型)

方法一:
ViewBag/ViewData
使用上没有太大差别,写法不同!

差异:
ViewData 1.0 手动转换
ViewBag 3.0 使用方便(喜欢使用) 自动转换 性能略低

类型不同:
动态类型,字典类型,常用来传简单少量的值,也可以传递复杂大量的值

使用ViewBag/ViewData传递数据

控制器代码:
public ActionResult Index()
{
string a = "123";
//ViewBag.a = a;
ViewData["x"] = a;
string date = DateTime.Now.ToString();
ViewBag.a = date;
ViewData["Y"] = date;
return View();
}
视图代码:
<body>
<div>
@ViewBag.x<br />
@ViewData["x"]<br />
@ViewBag.a<br />
@ViewData["y"]
</div>
</body>

方法二:*****
Model(模型) 方法用的多!!
简单类型,复杂类型如:DataSet,DataReader

定义:
可以封装数据的数据类型,或者是可以与数据源(数据库)交互的数据类型
模型对象是封装数据的类的实例

表现形式:
int i=0;
string s="";
分类:
内置的 自定义的
int,int[];Student,User
Student[] List<Student>
表现形式:
一个类:
Model文件夹:数据类型>>类
需求:学生信息管理
1>Student类:字段id,name,tel
方法Insert,Delete
二个类:
2>Student类:字段id,name,tel 通常叫做实体类
SqlHelper类:方法Insert,Delete 通常叫做数据访问类
三个类:
3>Student类:字段id,name,tel 实体类
StudentDAL类:方法Insert,Delet e 实体访问类
Insert(Student stu)
SqlHelper类:方法Insert,Delete 数据访问类
Insert(string sql)

应用实例:

1)使用模型传递简单的数据

2)使用模型传递自定义对象
步骤1:创建模型.编译[重新生成]
步骤2:创建控制器,方法,添加视图
注意:添加视图,选择(创建强类型视图)
包含@model Day02MVCModel传递数据.Models.实体类 语句视图,就叫做强类型视图[在视图声明了强类型的模型]
好处1:Model有提示功能了
好处2:视图就可以使用强类型的html辅助方法

控制器代码:
using Day02MVCModel传递数据.Models;
public ActionResult Index()
{
Student stu = new Student
{
Name="张三",
Age=18,
Sex="男"
};

return View(stu);
}
视图代码:
<body>
<div>
@Model.Name
@Model.Age
@Model.Sex
</div>
</body>
Model实体类代码:
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string Sex { get; set; }
}

3)使用模型传递自定义对象的数组(集合)
步骤1:创建模型.编译[重新生成]
步骤2:创建控制器,方法,实现方法返回多个对象
步骤3:添加视图,选择(创建 强类型视图)
注意:返回多个对象,修改?@model,如下,@model IEnumerable<Day02MVCModel传递数据.Models.Student>
步骤4:在视图中显示,注意:返回多个对象,用@foreach显示

控制器代码:
using Day02MVCModel传递数据.Models;
public ActionResult Index()
{
Student stu = new Student
{
Name="张三",
Age=18,
Sex="男"
};

return View(stu);
}
public ActionResult Index2()
{
List<Student> list = new List<Student>{
new Student{Name="zhangsan", Age=18, Sex="男"},
new Student{ Name="lisi", Age=25,Sex="女"}

};
return View(list);

}

视图代码:
@model IEnumerable<Day02MVCModel传递数据.Models.Student>
<body>
<div>
@foreach (var a in Model)
{
@a.Name
@a.Sex
@a.Age
}
</div>
</body>

Model实体类代码:
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string Sex { get; set; }
}


使用模型返回多个对象导入模型的命名空间到视图中

1.使用Using语句引入
@using Day02MVCModel传递数据.Models;
@model Student

2.在web.config文件中添加命名空间导入
<pages>
<namespaces>
<add namespace="Day02MVCModel传递数据"/>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages"/>
</namespaces>
</pages>

3.视图中的强类型Model
@model Day02MVCModel传递数据.Models.Student
@model Student
@model IEnumerable<Student>

 

 

 


003.MVC控制器与数据传递

标签:asp.net   指定   辅助   using   需求   动态类型   文件中   on()   配置   

原文地址:http://www.cnblogs.com/harveylv/p/6327413.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!