Asp.Net mvc基础
Asp.Net mvc
(一)MVC模式简介
(1)模型(models):描述数据,修改,操作数据的业务
(2)视图(View):应用程序用户界面的显示
(3)控制器(Controller):处理整个应用程序的逻辑通信
(4)mvc是,models,view,controller的简写与简称
(5)Asp.Net mvc是一种wep应用程序的框架,mvc模式应用于Asp.Net框架
(二)ASP.NET Wep API
(1)路由:将URL映射到控制器中,就而达到了HTTP的上下文服务,优点是:代码更加的简单,易懂
(2)模型绑定与验证:MVC的简化输入表单域,cookies,URL等等的参数
(3)过滤器:通过特性向操作添加一些行为
(4)基架:可以使用和添加mvc控制器,来添加新的wep api控制器。
(5)Http编程模型:处理HTTP请求和响应,是Wep API开发体验得到一定的优化。
(三)显示模式
(1)显示模式是根据浏览器发出的请求,基于约定的方法来选择不同的视图。
(四)捆绑和微小型框架
(1)作用:ASP.NET MVC4以后支持的捆绑和微小型框架,框架通过合并脚本引用来把若干个请求合并为一个请求,这样就大大的减少了站点的请求数量了。
ASP.NET MVC控制器
(1)控制器的作用:控制器主要负责接收和解释输入,并更新任何数据类,然后通过通知用户进行更改和应用程序的更新。
ASP.NET MVC视图
表单提交:1、视图上需要有form2、视图上需要有submit
1、控制器需要添加两个同名Action2、通过特性修饰区分两个Action[HttpGet]public ViewResult xxx(){}
[HttpPost]public ViewResult xxx(){}
视图提交:1、弱类型视图:集合(FormCollection)[HttpPost]public ViewResult xxx(FormCollection form){ form["key"]}
2、强类型视图:对象(类 对象)[HttpPost]public ViewResult Insert(Models.User user){ }
在视图中创建超链接的方式:1、@Html.ActionLink(链接文本,action名称)跳转到当前控制器下的action名称上2、@Html.ActionLink(链接文本,action名称,控制器名称)跳转到指定的控制器下的action名称上3、@Html.ActionLink(链接文本,action名称,路由参数对象)路由参数对象:A、是一个object对象,创建时需要new{}生产一个匿名对象B、该匿名对象至少需要包含一个id=值的属性,例如:new {id=1243}C、该匿名对象如果要包含多个路由设置,格式为new{controller=控制器名称,action=方法名称,id=参数值}
@Html.RouteLink(链接文本, 路由对象)路由对象:A、是一个object对象,创建时需要new{}生产一个匿名对象B、格式可以是以下任意一种new {controller=控制器名称,action=方法名称,id=参数值}new {action=方法名称,id=参数值}new {controller=控制器名称,id=参数值}new {id=参数值}
(1)Razor
(1)视图动态添加内容,可以分为四个类方法:内联代码、html辅助器方法、分部视图、子动作。
一、使用内联代码
内联代码就是以@符号开头的一条或多条C#语句。这是Razor视图引擎的核心,也是生成动态内容最简单而容易的方法。
1、将命名空间引入视图
2、Razor的html字符串编码
例如:在新建的项目中添加MyUtility.cs
namespace DynamicData.Infrastructure
{
public class MyUtility
{
public static string GetUsefulData()
{
return "<form>Enter your password:<input type=text>"
+ "<input type=submit value=\"Log In\"/></form>";
}
}
}
(2)view使用片段
(1)布局页呢?是把所有的那些控件全部写完了,而自己要做的则是添加自己想要的内容而已。
(2)Razor引擎支持分页的概念,能够在一个布局里面提供内容局域,Razor分页的功能能更好的控制视图部分插入布局以及它放在的位置,例如:
@{
ViewBag.Title = "Home Page";
}
@section Header{
<h4>这个是站点的顶部</h4>
}
@section Body{
<h4>这是内容部分</h4>
}
@section Footer{
<h4>这是站点的底部</h4>
}
(3)MVC内置的视图引擎
(1)Razor视图引擎是一个干净的、轻量级的、简单的视图引擎,最大限度的减少了语法和额外的字符。
(2)使用指定的编辑器对象来呈现指定的视图上下午。
(3)引擎的顺序是以自定义的引擎优先,如果自我定义的视图引擎处理不了,后到系统的引擎。
(五)模型绑定
(一)理解模型绑定
模型绑定是HTTP请求与C#方法之间的一个桥梁,它根据 Action 方法中的 Model 类型创建 .NET 对象,并将 HTTP 请求数据经过转换赋给该对象。当我们启动项目,并导航到/Home/Index/1,我们会看见图下:
当我们请求 /Home/Index/1 URL 时,路由系统便将最后一个片段值 1 赋给了 id 变量。action invoker 通过路由信息知道当前的请求需要 Index action 方法来处理,但它调用 Index action 方法之前必须先拿到该方法参数的值。 默认的动作调用器ControllerActionInvoker,要依靠模型绑定器来生成调用动作所需要的的数据对象,模型绑定器由IModelBinder接口所定义。在本例中,动作调用器会检查Index方法,并发现它具有一个int型参数,于是会查找负责int值绑定的绑定器,并调用它的BindModel方法。
(2)默认的模型绑定器
应用程序有多个绑定器,大多数的都是依赖与内置绑定器类---DefaultModelBinder,一般情况下,模型绑定器搜索4个路径,如下所示。
源 | 描述 |
---|---|
Request.Form | HTML表单提供的值 |
RouteDate.Values | 使用应用程序路由获取的值 |
Request.QueryString | 包含在URL的请求字符串里面的数据 |
Request.Files | 作为请求部分被上传的文件 |
基本的代码案例
1.首先在Models下面创建Person类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVCModels.Models
{
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public Address HomeAddress { get; set; }
public Role Role { get; set; }
}
public enum Role
{
Admin,
User,
Guest,
}
public class Address
{
public string Line { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
}
}
2.在Controllers中的HomeController中编写如下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVCModels.Models;
namespace MVCModels.Controllers
{
public class HomeController : Controller
{
private Person[] personDate = {
new Person { PersonId = 1, FirstName = "Adam", LastName = "Freeeman", Role = Role.Admin},
new Person { PersonId = 2, FirstName = "Jacqui", LastName = "Griffyth", Role = Role.User},
new Person { PersonId = 1, FirstName = "John", LastName = "Smith", Role = Role.Guest},
};
public ActionResult Index( int id = 1 )
{
Person dataItem = personDate.Where(p => p.PersonId == id).First();
return View(dataItem);
}
public ActionResult CreatePerson()
{
return View(new Person());
}
[HttpPost]
public ActionResult CreatePerson(Person model)
{
return View("Index",model);
}
}
}
3.在视图(Views)中添加createPerson视图,代码示例如下
@model MVCModels.Models.Person
@{
ViewBag.Title = "CreatePerson";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>CreatePerson</h2>
@using (Html.BeginForm())
{
<div>
<label>
@Html.LabelFor(m => m.PersonId);
@Html.LabelFor(m => m.PersonId);
</label>
</div>
<div>
<label>
@Html.LabelFor(m => m.FirstName);
@Html.EditorFor(m => m.FirstName);
</label>
</div>
<div>
<label>
@Html.LabelFor(m => m.LastName);
@Html.EditorFor(m => m.LastName);
</label>
</div>
<div>
<label>
@Html.LabelFor(m => m.Role);
@Html.EditorFor(m => m.Role);
</label>
</div>
<button type="submit">Submit</button>
}
4.最后在index视图中再进行代码编写,代码示例如下
@model MVCModels.Models.Person
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Person</h2>
<div>
<label>ID:</label>
@Html.DisplayFor(m => m.PersonId)
</div>
<div>
<label>First Name:</label>
@Html.DisplayFor(m => m.FirstName)
</div>
<div>
<label>Role</label>
@Html.DisplayFor(m => m.Role)
</div>
(六)控制器和动作
(1)概念:在Asp.Net Mvc框架里面,控制器是包含必要的处理请求.Net类,控制器的角色封装了应用程序逻辑,而控制器主要负责处理请求,对模型操作,选择视图呈现给用户。
过滤器
过滤器类型 | 接口 | 默认实现 | 描述 |
---|---|---|---|
Action | IActionFilter | ActionFilterAttribute | 在动作方法之前及之后运行 |
Result | IResultFilter | ActionFilterAttribute | 在动作结果被执行之前和之后运行 |
AuthorizationFilter | IAuthorizationFilter | AuthorizeAttribute | 首先运行,在任何其它过滤动作方法之前 |
Exception | IExceptionFilter | HandleErrorAttribute | 只在另一个过滤器,动作方法,动作结果出现异常时运行 |
(七)Mvc Web API
(1)它是WCF开发出来的轻量级资料获取技术,它使用了基础的HTTP协议
(2)Web API 框架是一个面向 Http 协议的通信框架。对于 WCF 而言,Web API 只面向于 Http 协议设计,而且没有 WCF 那么繁琐的配置。Web API 的开发类似于 ASP.NET MVC 中控制器的开发,但是相对于直接使ASP.NET MVC 来返回 Json 对象的方式而言,Web API 封装了数据的序列化、反序列化,接口、实现都更加简单。
说明:以上得内容尚未完善,过段时间补齐
上一篇: PS制作日式迷幻和风图腾效果
下一篇: AOJ102材质贴图