Asp.Net mvc基础

本文介绍了ASP.NET MVC的基础知识,包括MVC模式的组成部分,如模型、视图和控制器的职责。详细讲解了ASP.NET Web API的特性,如路由、模型绑定与验证、过滤器。还探讨了显示模式、捆绑和微小型框架在减少站点请求数量上的作用。此外,文章还阐述了控制器和动作的工作原理,以及模型绑定如何作为HTTP请求和C#方法之间的桥梁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.FormHTML表单提供的值
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类,控制器的角色封装了应用程序逻辑,而控制器主要负责处理请求,对模型操作,选择视图呈现给用户。

过滤器

过滤器类型接口默认实现描述
ActionIActionFilterActionFilterAttribute在动作方法之前及之后运行
ResultIResultFilterActionFilterAttribute在动作结果被执行之前和之后运行
AuthorizationFilterIAuthorizationFilterAuthorizeAttribute首先运行,在任何其它过滤动作方法之前
ExceptionIExceptionFilterHandleErrorAttribute只在另一个过滤器,动作方法,动作结果出现异常时运行

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

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值