欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Asp.Net mvc基础

程序员文章站 2022-06-11 14:50:28
...

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 封装了数据的序列化、反序列化,接口、实现都更加简单。

 

说明:以上得内容尚未完善,过段时间补齐