ASP.NET MVC学习笔记(一)

仅为记录学习,笔记模板为B站吕迪老师

目录

仅为记录学习,笔记模板为B站吕迪老师

一、ASP.NET的两种开发模式

1、ASP.NET MVC的开发模式

(1)、处理流程

(2)、显著特点

二、MVC模式的两种不同解读

1、MVC作为架构模式的理解

2、MVC架构模式综合模式

3、MVC优点:

三、第一个ASP.NET MVC程序

1、新建的项目,里面的文件夹架构

2、访问需要进行的操作路径

3、控制器的“约定大于配置”

4、Controller类型可以放到其他项目中

四、Razor(刀片)语法

1、Razor的文件类型

2、Razor语法之@符号

3、Razor语法之代码块定义

4、Razor语法之注释

5、从控制器向页面传值的方式


一、ASP.NET的两种开发模式

 

1、ASP.NET MVC的开发模式

(1)、处理流程

在ASP.NET MVC中,客户端所请求的URL是被映射到相应的Controller去,然后由Controller来处理业务逻辑,或许要从Model中获取数据,然后再由Controller选择合适的View返回给客户端,再说前面的我们运行的ASP.NET MVC程序访问的http://www.aspnetmvc.com/Home/Index这个URL,它其实访问的是HomeController中的Index的这个Action。运行速度MVC较快。

(2)、显著特点

  • 更加简洁,更加接近原始的“请求——处理——响应”
  • 更加开发,更多的新特点
  • 不会取代WebForm
  • 底层跟WebForm都是一样的,只是管道上不同处理而已

二、MVC模式的两种不同解读

MVC模式两种理解:一种是表现模式,另一种是架构模式,它将应用程序分成三个主要组件,即视图(VIEW) 、控制器(Controller)和模型(Model)。

M:Model主要是存储或者是处理数据的组件:Model其实是实现业务逻辑层对实体类相应数据库操作

V:VIEW是用户接口层组件,主要是将Model中的数据展示给用户。aspx和ascx文件被用来处理视图的职责。

C:Controller处理用户交互,从Model中获取数据并将数据传给指定的View

1、MVC作为架构模式的理解

作为架构模式时,View的职责就是负责展示数据的,而Controller则负责获取View传递来的数据,然后调用业务逻辑层处理完成的数据传递给View进行展示。而Model则处理业务逻辑,并且把结果返回给Controller,从传统三层架构上来看,View和Controller都属于UI,而Model则横跨BLL与DAL层。

2、MVC架构模式综合模式

对mvc的两种不同理解的区别就在于Model的理解上,将Model作为业务模型(BLL,DAL等)还是作为视图模型(ViewModel)

3、MVC优点:

  • 1、很容易将复杂的应用分成Model(ViewModel)、View、Controller三个组件,将处理后台逻辑代码与前台展示逻辑进行了很好的分离,属于松耦合关系,更易于敏捷开发和测试驱动开发,有很强的可扩展性。
  • 2、因为没有服务器控件,所以程序控制更加灵活,页面更加干净。
  • 3、通过修改路由规则,可以控制生成自定义的url,因此控制生成的URL更加容易。
  • 4、强类型View实现、Razor视图、Model绑定机制、Model的验证机制,更安全高效。

三、第一个ASP.NET MVC程序

1、新建的项目,里面的文件夹架构

所有的 MVC 应用程序的文件夹名称都是相同的。MVC 框架是基于默认的命名。控制器写在 Controllers 文件夹中,视图写在 Views 文件夹中,模型写在 Models 文件夹中。

标准化的命名减少了代码量,同时有利于开发人员对 MVC 项目的理解。

App_Data 文件夹

App_Data 文件夹用于存储应用程序数据。

Content 文件夹

Content 文件夹用于存放静态文件,比如样式表(CSS 文件)、图标和图像。

Visual Web Developer 同时也会添加一个标准的样式表文件到项目中:即 content 文件夹中的 Site.css 文件。这个样式表文件是您想要改变应用程序样式时需要编辑的文件。

Controllers 文件夹

Controllers 文件夹包含负责处理用户输入和响应的控制器类。

MVC 要求所有控制器文件的名称以 "Controller" 结尾。

Visual Web Developer 已经创建好一个 Home 控制器(用于 Home 页面和 About 页面)和一个 Account 控制器(用于 Login 页面):

Models 文件夹

Models 文件夹包含表示应用程序模型的类。模型控制并操作应用程序的数据。

Views 文件夹

Views 文件夹用于存储与应用程序的显示相关的 HTML 文件(用户界面)。

Views 文件夹中包含每个控制器对应的一个文件夹。

在 Views 文件夹中,Visual Web Developer 已经创建了一个 Account 文件夹、一个 Home 文件夹、一个 Shared 文件夹。

Account 文件夹包含用于用户账号注册和登录的页面。

Home 文件夹用于存储诸如 home 页和 about 页之类的应用程序页面。

Shared 文件夹用于存储控制器间分享的视图(母版页和布局页)。

Scripts 文件夹

Scripts 文件夹存储应用程序的 JavaScript 文件。

默认情况下,Visual Web Developer 在这个文件夹中存放标准的 MVC、Ajax 和 jQuery 文件:

2、访问需要进行的操作路径

3、控制器的“约定大于配置”

在Controller中新建一个控制器,取名为HomeController。在默认的Index这个Action中重建一个视图,默认名为Index即可。

1、Controller放到controller文件夹中,并且命名方式以controller结尾

2、每个Controller都对应View一个文件夹,文件夹的名称跟Controller名相同。

3、视图的相关约定

4、Controller中的方法名都对应一个View(非必须,但是建议这样做)而且View的名字跟Action的名字相同

5、控制器必须是非静态类,并且要实现IController接口

4、Controller类型可以放到其他项目中

  1. 所有的视图都必须放到View目录下
  2. 不同控制器的视图用文件夹进行分割,每个控制器都对应一个视图目录
  3. 一般视图的名字跟控制器的Action相对应(非必须)
  4. 对个控制器公共的视图放到Shared:例如公共的错误页,列表模板页,表单模板页等

四、Razor(刀片)语法

Razor作为一种全新的模板被MVC使用,Razor在减少代码冗余,增强代码可读性和VS智能感知方面,都有着突出的优势。

1、Razor的文件类型

Razor支持两种文件类型,分别是.cshtml和.vbhtml,其中.cshtml的服务器代码使用了C#的语法,.vbhtml的服务器代码使用了vb.net的语法。Razor其实是一种服务器代码和HTML代码混写的代码模板。

2、Razor语法之@符号

@字符是Razor中的一个重要符号,它被定义为Razor服务器代码的开始符号,如果我们希望在网页中输出一个变量,或者当前日期,我们可以使用如下代码。

代码块@{....}定义多个变量是使用的代码

对Razor语法定义的变量进行输出时,@变量名的方式进行输出

@{ string productName = "灯泡!";}
<span>@productName</span>C#代码和html代码进行混编
<span>当前时间为:@DateTime.Now.ToString("yyyy-MM-hh");</span>

3、Razor语法之代码块定义

你可以使用@{}来定义一段代码块

@{
string name = "tom";
int age = 20;
int a = 20;
int b = 22;
int sum = a + b;
}

在代码块中,我们编写代码块的方式和通常服务器端代码的方式是一样的,另外如果需要输出,例如上面在页面中输出结果,我们可以使用@sum进行输出。即使混写,也不影响VS的智能感知功能。

特殊情况,输出@符号时,输出email地址:@xxx.@qq.com

4、Razor语法之注释

通过@字符输出html标签的方法
直接输出:@{string html = " <font color = 'red' >文本</font>";}@html
第一种:@{IHtmlString html1= new HtmlString("<font color='red'>再见!</font>");}
第二种:@{string html2 = "<font color='red'>再见!</font>";}
:@{Html.Raw(html2)}

这里所说的注释是指服务器端的注释,在Razor代码块中,可以使用C#的注释方法来进行注释,分别是//:(单行注释)和/**/(多行注释)。

另外Razor还提供了一种新的服务器段代码注释,可以即注释C#代码,同时可以注释HTML代码,@**@这种方式不限代码块的限制,在Razor代码中的任何位置都可以。

1、小练习定义a=10;b=20;进行判断,通过h2标签进行输出“大于”,“等于”,“小于”
@{
int a =10;
int b = 20;
}
@if(a>b){
    <h2>a大于b</h2>
}
else if(a==b){
    <h2>a等于b</h2>
}
else{
    <h2>a小于b</h2>
}
2、定义一个List<string>集合,通过列表循环将其进行输出
@{
List<string> list = new List<string>() { "张飞", "刘备", "关羽" };
}
<table class="table table-bordered table-hover">
    <thead>
        <tr>
            <th>姓名:</th>
        </tr>
    </thead>
    <tbody>
    @foreach (var it in list)
    {
        <tr>
            <td>@it</td>
        </tr>
    }
    </tbody>
</table>

5、从控制器向页面传值的方式

  1. ViewData。通过键值对的形式传值,取值时通过键取出,取出来的往往进行强制类型转换

* 使用场景:向单个页面传值

* 例如:ViewData["myage"] = 23;

ViewData["myname"] = "tom";

ViewData["mylist"]= list;

  1. ViewBag:为ViewBag定义一个名称,通过这个名称取值,取出的值一般不需要强制转换,

dynamic类似理解为var,这种类型不需要进行数据转换,它会自动完成转换

例如: 使用场景:向单个页面传值

ViewBag.name = "lh";

ViewBag.age = 24;

ViewBag.list = list;

  1. TempData:使用方式和ViewData类似,使用键值对的形式传值,通过键进行取值

使用场景:向单个页面传值,也可以跨页传值,但是只能使用一次,一旦被接受就释放

Controller控制器定义
List<string> list = new List<string>() { "语文", "数学", "英语" };
ViewData["myage"] = 23;
ViewData["myname"] = "tom";
ViewData["mylist"]= list;
ViewBag.name = "lh";
ViewBag.age = 24;
ViewBag.list = list;
TempData["name"] = "跨页传值!";
View视图取值
@{
string name = ViewData["myname"].ToString();
int age = Convert.ToInt32(ViewData["myage"]);
List<string> list = ViewData["mylist"] as List<string>;
<br />
string bagname = ViewBag.name;
int bagage = ViewBag.age;
List<string> baglist = ViewBag.list;
string tempdate = TempData["name"].ToString();
}
<h1>viewdata的name:@name</h1>
<h1>viewdata的name:@age</h1>
<h1>viewdata的name:@list[0]</h1>
<h2>viewbag的name:@bagname</h2>
<h2>viewbag的name:@bagage</h2>
<h2>viewbag的name:@baglist[0]</h2>
<h2> tempdate的name:@tempdate</h2>
<a href="Test">跳转到Tset</a>
<a href="../User/Index">跳转到User控制器的View视图</a>

传值练习
使用ViewData打印name的值,使用ViewBag打印age的值
控制器定义方法和值
public ActionResult Chuanzhi2(){
    List<string> name = new List<string>() { "刘备", "关羽", "张飞", "赵云", "黄忠" };
    List<int> age = new List<int>() { 25, 24, 23, 22, 21 };
    ViewData["myname"]=name;
    ViewBag.myage=age;
}
View取值
@{
    List<string> name = VIewDate["myname"] as List<string>;
    List<int> name = VIewBag["myage"] as List<int>;
}
<table class="table table-bordered table-responsive" >
    <thead >
        <tr >
            <th >
                姓名:
            </th>
            <th >
                年龄:
            </th>
        </tr>
    </thead>
    <tbody class="text-primary">
        @for (int i = 0; i < 5; i++){
        <tr>
            <td>@myname[i]</td>
            <td>@myage[i]</td>
        </tr>
        }
    </tbody>
</table>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值