【.NET-MVC】ASP.NET MVC学习笔记1-概述
MVC概述
- MVC理论就是模型、视图、控制器。 (其实也是种思想,为了让前端、程序、数据分开,也是想解耦)
- MVC请求流程是:访问控制器,控制器来创建模型,模型去数据库获取数据,模型再返回给视图。
- VS 2013 创建MVC4 Web应用程序,自动生成MVC框架对应的文件夹,分别是Model、View、Controllers
- MVC不再用服务器控件(TextBox、GridView等),回到HTML时代,不过可以在html里使用UrlHelper和HTMLHelper类。(感觉还不如直接写回HTML代码)
- MVC不再用事件(Page_Load()),用回HTML的Get、Post方式请求。
控制器和视图
- 控制器文件名必须是Controller结尾。建行为(ActionResult),行为是返回数据,和处理用户请求
- 视图用来显示给用户界面,而视图可以有很多行为,可以把控制器当做一个类,里面可以写行为和绑定视图。(也能直接访问控制器里的public方法,这到底好还是不好?)
- return View()的原理是创建了ViewResult对象并渲染了界面。
- 方法返回类型除了ActionResult,还有ContentResult(只返回字符串)等。
- 在方法头上加上声明[NonAction],就不会作为行为。(还有许多方法声明,例如只能做POST请求的行为等,往下看有。)
感言
还是觉得WebAPI更适合分离前后端,而且很适合需要持续更新的项目,只是没有可比,MVC的场景是整个站点,WebAPI的场景是针对接口。
第一个MVC(其实自己之前写过几次了)
/Controllers/UserController.cs
public class UserController : Controller//控制器
{
public ActionResult Users()//行为
{
return View("User");//视图
} }
/Views/User/Users.cshtml(右键代码的View()方法 - 添加视图,会自动生成)
@{
ViewBag.Title = "Users";
} <h2>用户信息管理界面</h2>
传参的方法
- 用ViewData[]向页面传递数据,页面可以直接用@ViewData[]来使用。
- 在return View()里也可以传参,如return View("User",userinfo),但只能传引用类型,不能传值类型。
- 使用ViewBag.xxx,但不能和ViewData[]的重复,不然会覆盖掉ViewData[]的。(感觉ViewBag就是使用ViewData[]的)
Razor语法
- 在页面用@可以使用C#代码,类似aspx里的<%%>那样穿插客户端和服务器代码。(原则上视图一般只用显示结果,不参加逻辑和数据代码)
- 一般是cshtml页面,aspx和cshtml页面的区别和比较,还是不太清楚
/Controllers/UserController.cs
public class UserController : Controller//控制器
{
public ActionResult Users()//行为
{
var name = "老K";
ViewData["name1"] = "ViewData名字:"+name;//旧的ViewData传参
ViewBag.name = "ViewBag名字:"+name;//新的ViewBag,可以随意带属性,不过性能速度比ViewData慢。
return View("Users",(object)name);//视图
} }
/Views/User/Users.cshtml
@{
ViewBag.Title = "Users";
string name = (ViewData["name1"] != null) ? (string)ViewData["name1"] : "";
string viewname = (string)Model;
string bagname = ViewBag.name;
} <h2>用户信息管理界面</h2>
<p>@name</p>
<p>@viewname</p>
<p>@bagname</p>
使用EF
- EF原理,就是Entity Framework(实体框架),是个ORM工具(对象关系映射),优点是方便开发,加快开发速度,缺点是处理复杂逻辑性能不好(也许有些改进方法)。
- EF有3个方案,数据库自动生成,Model生成,POCO生成。
- 加上Linq,可以更便捷的开发,所以我也是向MVC + Linq to EF + Jquery组合方向学习(MVC里又有封装Jquery的方法,但我感觉Jquery已经够方便的了。)
- VS2013没有EF解决方法:我本来也没有,看了网上教的,在C:\ProgramData\Package Cache\{08AEF86A-1956-4846-B906-B01350E96E30}v12.0.20912.0\packages\EFTools,运行后点Repaire,如果没有,就在Package Cache里搜索EFTools
- 一些历史:EF2.0支持edmx生成,4.0支持Database First、Model First、Code First三种模式,5.0性能提升。在.NET Framework4.5可以使用EF 5.0.
步骤1:首先建好数据库表、字段。(这是传统点的方法,EF是可以帮你创建的。)
步骤2:创建一个文件夹或新的项目,添加新项 - 数据 - ADO.NET实体数据模型,然后有向导配置数据库,拉数据表进去。我的做法:建个edmx文件夹,建立NewsEF.edmx(里面很多配置文件),还有类名也要改成NewsEF。(默认还是是Entities)
步骤3:然后访问就直接MVC_Web.edmx.NewsEF来调用增、删、改方法,还可以用里面的实体类。(方便吧)
-大致原理-
模型:代表业务和逻辑层,封装了实体的属性和方法。
视图:负责将模型传递给表示层,具体用HTML、XML等。遵循原则,表示层最好不要用逻辑和业务。
控制器:控制程序的逻辑,是视图和模型协调的工具,从视图接收信息,然后再传到模型,模型再返回给视图。
惯例优先原则:.NET帮你生成好3个文件夹。注意一下,在Controller里,cs文件命名都必须Centroller结尾,在Views有Shared(保存共享视图)和其他文件,有点琐碎,但也提高效率
在App_Start里RouteConfig.cs是配置路由,目前理解是定义域名的规则,默认路径是 控制器名/行为/id。
控制器
(在Conteller里带ActionResult的方法),MVC4意思是下一步做什么,而不是怎么做
返回可以有很多类型:
View() 返回视图渲染的ViewResult
Content() 返回文本的ContentResult
File() 返回文件
还有Javascript()、Json()、HttpNotFound()、PartialView()...
控制器的参数(MVC强大功能之一:模型绑定,可以使用请求消息过来的参数)
传统是URL传参、Session、视图等,但这个只要有失败的解析就运行不下去,或者通过TryParse()来维护。
模型绑定其实也是与Request一一相应,不过省略了显示代码、方便使用:
public ActionResult Create(string title,decimal currentPrice,DateTime startTime,DateTime endTime)//这里是模型绑定,或者换成Auction实体类
{
var auction = new Auction(
Title = title,
CurrentPrice = currentPrice,
StartTime = startTime,
EndTime = endTime
);
} 还有通过return View()返回参数,如var id = "";return View("auction",id);
Razor语法(在html以@将服务器代码写进去的语法)
分为:代码段和代码块
代码段:如@DateTime.Now 或者有@Html.ActionLink("Login")
代码块:@{
代码内容
}
变量生命周期应该是页面级的,使用起来确实挺方便。
常用的特性:
[HttpGet] [HttpPost] 只处理Get / 只处理Post传递方式
[AllowAnonymous][Authorize]调用不用权限验证 / 限制调用
[Bind(...)]form表单提交时筛选参数用的
[Remote("","")]放在实体类,可以调用方法去检查
[HandleError(...)]异常处理,()里可以具体到哪些异常,与web.config的设置配合使用
传输数据:ViewData[]和ViewBag.xxx
安全、日志、缓存
参考:
http://www.cnblogs.com/powertoolsteam/p/MVC_one.html
《asp.net mvc4 web编程》
【.NET-MVC】ASP.NET MVC学习笔记1-概述的更多相关文章
- [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载、ID型别差异
[ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载.ID型别差异 原始码下载 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证.授 ...
- 路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) ASP.NET WebApi技术从入门到实战演练 C#面向服务WebService从入门到精通 DataTable与List<T>相互转换
路由其实也可以很简单-------Asp.net WebAPI学习笔记(一) MVC也好,WebAPI也好,据我所知,有部分人是因为复杂的路由,而不想去学的.曾经见过一位程序猿,在他MVC程序中, ...
- asp.net mvc 4 高级编程学习笔记:第三章 视图(2)
页面布局 asp.net MVC中提供了布局的支持,默认情况下才布局文件保存到 /View/Shared/目录下的_Layout.cshtml,View目录有个_ViewStart.cshtml文件, ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.12.ASP.NET MVC3的细节:URLs,Routing和Areas
Adam Applied ASP.NET 4 in Context 1 介绍Routing系统 在引入MVC之前,ASP.NET假定被请求的URLs和服务器硬盘上的文件之间有着直接关系.服务器的任务是 ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.11.ASP.NET MVC3的细节:概览MVC项目
书Adam The Definitive Guide to HTML5 Adam Applied ASP.NET 4 in Context and Pro ASP.NET 4 到此为止,我们已经学了为 ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.9.SportsStore:Securing the Administration Features
1 设置表单身份认证 因为ASP.NET MVC基于ASP.NET平台的核心,所以我们可以使用ASP.NET Form的身份认证,这是保持用户登录轨迹通用的方法.现在介绍最基本的配置. 在Web.co ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.7.SportsStore:购物车
3 创建购物车 每个商品旁边都要显示Add to cart按钮.点击按钮后,会显示客户已经选中的商品的摘要,包括总金额.在购物车里,用户可以点击继续购物按钮返回product目录.也可以点击Check ...
- ASP.NET MVC5学习笔记01
由于之前在项目中也使用MVC进行开发,但是具体是那个版本就不是很清楚了,但是我觉得大体的思想是相同的,只是版本高的在版本低的基础上增加了一些更加方便操作的东西.下面是我学习ASP.NET MVC5高级 ...
- Asp.Net Core学习笔记:入门篇
Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...
- ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探
前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...
随机推荐
- Android项目---快递查询
快递查询,快递100上有更多接口信息 1.快递查询的接口是 快递公司的code值+快递单号 进行的网络查询.第一步,怎么将快递公司的名字转换成code值,传递给接口.下面是快递公司以及对应的code值 ...
- Node填坑教程——前言
Node是什么? Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物 ...
- 加密算法 MD5/SHA1
近来想学习函数式编程. 但是一直不知道怎么展开这个学习过程,目前的研究进度也不深入,想讲解一些原理也无从下手. 先简单的上一些算法,逐步分析语法和思想.虽然程度不深,但至少能记录这个过程. 本例子用F ...
- 项目管理Project
使用Project进行项目管理 - 项目管理系列文章 Posted on 2014-02-04 11:59 lzhdim 阅读(1175) 评论(0) 编辑 收藏 本系列文章列表地址:http://w ...
- MVC 5.1的遭遇:“已添加了具有相同键的项”
ASP.NET MVC 3升级至MVC 5.1的遭遇:“已添加了具有相同键的项” 最近将一个项目从ASP.NET MVC 3升级至刚刚发布的ASP.NET MVC 5.1,升级后发现一个ajax请 ...
- GTK+编程概述
目标 什么是GTK? 怎样做一个GTK应用程序 事件(Events).信号(Signals).回调函数(Callbacks) 组件(widgets) 引言 GIMP工具包(GTK+)最初被设计为一个光 ...
- Unicode(UTF&UCS)深度历险
Unicode(UTF&UCS)深度历险 计算机网络诞生后,大家慢慢地发现一个问题:一个字节放不下一个字符了!因为需要交流,本地化的文字需要能够被支持. 最初的字符集使用7bit来存储字符,因 ...
- iOS单元测试
参考下面的链接 ,写的还不错 http://gaohaijun.blog.163.com/blog/static/176698271201151052325749/
- MyEclipse修改默认的workspace路径
在此只提供一个自己认为可行的办法(已验证可行) 已MyEclipse8.5为例 打开安装路径C:\Program Files\Genuitec\MyEclipse 8.5\configuration下 ...
- Web开发框架对比
Web开发框架能极大地提升开发效率,下面对一些常用的框作一些更深层次的对比. JSF JSF不是极好的快速开发原型,代码生成不是内置功能,并且原型开发应用需要开发完整应用程序那么多的配置.这真的不是J ...