【.NET】学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请求的行为等,往下看有。)

第一个MVC(其实自己之前写过几次了)

/Controllers/UserController.cs

    public class UserController : Controller//控制器
    {
        public ActionResult Users()//行为
        {
            return View("User");//视图
        }

    }

/Views/User/Users.cshtml(右键代码的View()方法 - 添加视图,会自动生成)

@{
    ViewBag.Title = "Users";
}

<h2>用户信息管理界面</h2>

第2篇:视图传参、视图里使用Razor语法

传参的方法

  • 用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>

第3篇:使用EF、使用服务器端验证

使用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编程》

时间: 2024-10-18 07:22:46

【.NET】学ASP.NET MVC笔记的相关文章

我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击

我要学ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击 概述      众所周知,ASP.Net MVC程序在浏览器运行时产生了标准的Html标签,包括浏览器要发送的关键数据等内容都在Html内容里面,听起来不错,但是假如我们仿造类似的Html内容,更改里面关键数据,在浏览器运行起来会怎么样呢?好下面我们就做这样一个例子.       CSRF攻击例子 首先我们拿以前做好的person/edit作为例子 先看控制器代码 //初始页面        

[转]我要学ASP.NET MVC 3.0(十二): MVC 3.0 使用自定义的Html控件

本文转自:http://www.cnblogs.com/lukun/archive/2011/08/05/2128693.html 概述   在ASP.NET MVC框架中已经封装了很多基于Html标准的Html控件,我们可以方便的使用这些控件输出想要的内容,使开发变得快捷. 例如ASP.NET MVC框架包括以下设置标准的HTML控件(部分控件): Html.ActionLink() Html.BeginForm() Html.CheckBox() Html.DropDownList() Ht

跟我学ASP.NET MVC之十一:URL路由

跟我学ASP.NET MVC之十一:URL路由摘要: 在MVC框架之前,ASP.NET假定在请求的URLs和服务器硬盘文件之间有直接的关系.服务器的职责是接收浏览器请求,从相应的文件发送输出. 这种方法只能工作于Web表单,每一个ASPX页面既是一个文件,也是一个对应请求的自包含响应.而这对于MVC应用程序来说就无效了,因为请求是由控制器类里的行为方法处理的,而且没有磁盘上一对一关系的文件. ASP.NET平台使用路由系统处理MVC URLs.在这篇文章中,我将向你展示怎样为你的工程使用路由系统

ASP.NET mvc笔记

笨鸟勤飞先入林,那如果既笨又记性不好呢....额,所以我写点笔记记一下这几天温习过的内容. asp.net webform与asp.net mvc间的区别: 1.webform的访问地址会指向一个aspx文件,这个文件在服务器端是真实存在的:而对于mvc,它是通过路由,路由到一个特定控制器的action来处理用户的请求. 2.webform竭力维护视图状态,而mvc重新回到了web最初的模样,纯洁,简单,仅仅是请求--处理---响应. 3.webform常使用服务器端控件,而在mvc里,不存在服

ASP.NET MVC笔记誊录

非托管代码:像由c++写的程序直接把二进制代码交给操作系统的内核来处理,叫做非托管代码 托管代码:运行在CLR下面的代码叫托管代码,由CLR来对代码进行异常等处理,编译成平台代码 匿名函数: public delegate int AddDel(int a,int b); 简单委托: AddDel delDemo=new AddDel(AddInt) public int AddInt(int a,int b) { return a+b; } 泛型委托,一般用于约束返回值和传入的参数 publi

asp.net MVC 笔记

---------------------------------------------------------------------15:28 2014/7/21强类型化后台ViewData.Model=userInfo;//userInfo对象传进去.前台<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MvcUserDemo.Models.UserInfo>"%><

跟我学ASP.NET MVC之七:SportsStrore购物车

摘要: SportsStore应用程序进展很顺利,但是我不能销售产品直到设计了一个购物车.在这篇文章里,我就将创建一个购物车. 在目录下的每个产品旁边添加一个添加到购物车按钮.点击这个按钮将显示客户到目前为止选择的产品摘要,包含总价格.这时候,用户可以点击继续购物按钮返回产品目录,或者点击现在下单按钮完成订单结束购物过程. 定义Cart实体类 在SportsStore.Domain工程的Entities文件夹下,创建代码文件Cart.cs. 1 using System.Collections.

ASP.NET MVC

[ASP.NET MVC 大牛之路]03 - C#高级知识点概要(2) - 线程和并发 摘要: 我也想过跳过C#高级知识点概要直接讲MVC,但经过前思后想,还是觉得有必要讲的.我希望通过自己的经验给大家一些指引,带着大家一起走上ASP.NET MVC大牛之路,少走弯路.同时也希望能和大家一起交流,这样也能发现我自己的不足,对我自己的帮助也是非常大的.建议大家对C#撑握的不错的时候,可以去看一些...阅读全文 posted @ 2014-12-29 23:15 Liam Wang 阅读(9730)

关于ASP.NET MVC的权限认证的一些总结

最近在学ASP.NET MVC的权限认证的一些东西,上网搜索了一阵,发现网上的方法大多数是以下几类: 一.FormsAuthentication.SetAuthCookie(admin.Name, false)或者是FormsAuthenticationTicket 感受:感觉FormsAuthentication.SetAuthCookie这种方法重在检查是否有用户登录等,需要检查权限时,要调用this.User.Identity.IsAuthenticated方法来检查是否授权等,每次要检查