C#02asp.net
mvc
m业务逻辑层
是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
v视图层
是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
c控制器
是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
Visual Studio Express
MVC 和 Web Forms
Web Forms 对比 MVC
MVC 编程模式是对传统 ASP.NET(Web Forms)的一种轻量级的替代方案。它是轻量级的、可测试性高的框架,同时整合了所有已有的 ASP.NET 特性,比如母版页、安全性和认证。
拖拽 Web 控件和 Web 组件
Web 服务器语言(Razor 使用 VB 或者 C#)
Web 服务器(IIS Express)
数据库服务器(SQL Server Compact)
完整的 Web 开发框架(ASP.NET)
文件夹
App_Data 文件夹
储存程序数据
Content 文件夹
放静态文件,如样式表,图标,图像
Controllers 文件夹
包含负责处理用户输入和响应的控制器类,以controller结尾
home控制器
Account控制器
用于login
MVC 框架的映射方式有所不同。MVC 将 URL 映射到方法。这些方法在类中被称为"控制器"。
控制器负责处理进入的请求,处理输入,保存数据,并把响应发送回客户端。
Views 文件夹中的文件 Index.cshtml 和 About.cshtml 定义了控制器中的 ActionResult 视图 Index() 和 About()。
Models 文件夹
包含表示应用程序模型的类。模型控制并操作应用程序的数据
View
用于储存与应用程序的显示相关的HTML文件
包含每一个控制器对应的一个文件夹
通用文件
Home
存储home页和about页之类的应用程序页面
Account
主要包含用于用户账号注册和登录的页面
shared
用于存储控制器间分享的视图(母版页和布局页)
SQL数据库
创建
右击 Solution Explorer 窗口中的 App_Data 文件夹
选择 Add, New Item
选择 SQL Server Compact Local Database *
将数据库命名为 Movies.sdf
点击 Add 按钮
添加表
双击 App_Data 文件夹中的 Movies.sdf 文件,将打开 Database Explorer 窗口。
如需在数据库中创建一个新的表,请右击 Tables 文件夹,然后选择 Create Table。
列
字符类型
nvarchar(100)
添加数据库记录
双击 App_Data 文件夹中的 Movies.sdf 文件。
右击 Database Explorer 窗口中的 MovieDBs 表,并选择 Show Table Data。
记录
ID Title Director Date
id不需要编辑
1 Psycho Alfred Hitchcock 01.01.1960
2 La Dolce Vita Federico Fellini 01.01.1960
添加连接字符串
向您的 Web.config 文件中的
providerName="System.Data.SqlServerCe.4.0"/>
MVC模型
定义
MVC 模型包含了除纯视图和控制器逻辑以外的其他所有应用程序逻辑(业务逻辑、验证逻辑、数据访问逻辑)。
通过 MVC,模型可以控制并操作应用程序数据。
Models 文件夹
Models 文件夹包含表示应用程序模型的类。
Visual Web Developer 自动创建一个 AccountModels.cs 文件,该文件包含用于应用程序安全的模型。
AccountModels 包含 LogOnModel、ChangePasswordModel 和 RegisterModel。
添加数据库模型
步骤
在 Solution Explorer窗口中,右击 Models 文件夹,并选择 Add 和 Class。
将类命名为 MovieDB.cs,然后点击 Add。
编辑这个类:
添加数据库控制器
重建您的项目:选择 Debug,然后从菜单中选择 Build MvcDemo。
在 Solution Explorer(解决方案资源管理器)中,右击 Controllers 文件夹,选择 Add 和 Controller。
设置控制器名称为 MoviesController。
选择模板:Controller with read/write actions and views, using Entity Framework
选择模型类:MovieDB (MvcDemo.Models)
选择 data context 类:MovieDBContext (MvcDemo.Models)
选择视图 Razor (CSHTML)
点击 Add
添加数据库视图
在 Movies 文件夹中,会自动创建以下文件:
Create.cshtml
Delete.cshtml
Details.cshtml
Edit.cshtml
Index.cshtml
应用程序安全
理论
Models 文件夹包含表示应用程序模型的类。
Visual Web Developer 自动创建 AccountModels.cs 文件,该文件包含用于应用程序认证的模型。
AccountModels 包含
LogOnModel
public class LogOnModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
ChangePasswordModel
public class ChangePasswordModel
{
[Required]
[DataType(DataType.Password)]
[Display(Name = "Current password")]
public string OldPassword { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm new password")]
[Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
RegisterModel
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
发布网站
1.使用最新版asp.net
2.复制web文件夹
从您的开发计算机上复制您的网站(所有文件夹和内容)到远程主机(服务器)上的应用程序文件夹中。
如果您的 App_Data 文件夹中包含测试数据,请不要复制这个 App_Data 文件夹(详见下面的第 5 点)。
3.复制DLL文件
在远程服务器上的应用程序根目录中创建 bin 文件夹。(如果您已经安装 Helpers,则 bin 文件夹已经存在)
复制下列文件夹中的所有文件:
C:Program Files (x86)Microsoft ASP.NETASP.NET Web Pagesv1.0Assemblies
C:Program Files (x86)Microsoft ASP.NETASP.NET MVC 3Assemblies
到您的远程服务器上的应用程序的 bin 文件夹中。
4.复制SQL Sever Compact DLL文件
如果您的应用程序使用了 SQL Server Compact 数据库(在 App_Data 文件夹中的一个 .sdf 文件),那么您必须复制 SQL Server Compact DLL 文件
复制下列文件夹中的所有文件:
C:Program Files (x86)Microsoft SQL Server Compact Editionv4.0Private
到您的远程服务器上的应用程序的 bin 文件夹中。
创建(或者编辑)应用程序的 Web.config 文件:
实例
<?xml version="1.0" encoding="UTF-8"?>
description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1,Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
5.复制SQL Sever Compact数据
大多数不希望复制
如果您一定要复制 SQL 数据文件(.sdf 文件),那么您应该删除数据库中的所有数据,然后从您的开发计算机上复制一个空的 .sdf 文件到服务器上。
参考手册 类 接口的描述
https://www.runoob.com/aspnet/mvc-reference.html
IIS
操作流程
1.打开
2.default站点下面添加虚拟目录 路径是项目发布路径
3.右键文件夹将其切换为应用程序
4.就能在浏览器上显示web项目
拓展名
asp
.asp
asp.net
.aspx
Razor C# 的asp.net文件
.cshtml
vb
.vbhtml
webpage You entered:
基础
什么是?
创建ASP.NET网站的一种方式,是其中最简单的开发模式(另外两种MVC,web forms)
Razor
什么是?
是一种将基于服务器的代码添加到网页中的标记语法
Razor具有传统ASP.NET标记的功能,但更容易学习
Razor是一种服务器端标记语法,与asp和php很像
Razor支持C#和vb
C#语法规则
代码块包含在 @{ ... } 中
内联表达式(变量和函数)以 @ 开头
代码语句用分号结束
变量使用 var 关键字声明
字符串用引号括起来
C# 代码区分大小写
C# 文件的扩展名是 .cshtml
VB语法
页面布局
一致的外观
有相同的头部,底部,样式,布局
Content Blocks(内容块)
使用 @RenderPage() 方法从不同的文件导入内容
内容块(来自另一个文件)能被导入网页中的任何地方。内容块可以包含文本,标记和代码,就像任何普通的网页一样。
将共同的头部和底部写成单独的文件,这样会帮您节省大量的工作。您不必在每个页面中书写相同的内容,当内容有变动时,您只要修改头部或者底部文件,就可以看到站点中的每个页面的相应内容都已更新。
Layout Page(布局页)
布局页中使用 @RenderBody() 方法嵌入内容页,除此之外,它与一个正常的网页没有什么差别。
每个内容页都必须以布局指令开始。
另一种创建一致外观的方法是使用布局页。一个布局页包含了网页的结构,而不是内容。当一个网页(内容页)链接到布局页,它会根据布局页(模板)的结构进行显示。
D.R.Y. - Don't Repeat Yourself(不要自我重复)
通过 Content Blocks(内容块)和 Layout Pages(布局页)这两个 ASP.NET 工具,您可以让您的 Web 应用程序显示一致的外观。
这两个工具能帮您节省大量的工作,您不必再每个页面上重复相同的信息。集中的标记、样式和代码让您的 Web 应用程序更易于管理,更易于维护。
防止文件被浏览
在 ASP.NET 中,文件的名称以下划线开头,可以防止这些文件在网上被浏览。
如果您不想让您的内容块或者布局页被您的用户看到,可以重命名这些文件:
_header.cshtm
_footer.cshtml
_Layout.cshtml
隐藏敏感信息
在 ASP.NET 中,隐藏敏感信息(数据库密码、电子邮件密码等等)最通用的方法是将这些信息保存在一个名为"_AppStart"的单独的文件中。
文件夹
逻辑文件夹结构和物理文件夹结构
逻辑文件夹结构
"Account" 文件夹包含登录和安全文件
"App_Data" 文件夹包含数据库和数据文件
"Images" 文件夹包含图片
"Scripts" 文件夹包含浏览器脚本
"Shared" 文件夹包含公共的文件(比如布局和样式文件)
物理文件夹结构
在上述网站中的"Images"文件夹在计算机上的物理文件夹结构可能如下:
C:\Documents\MyWebSites\Demo\Images
虚拟名称和物理名称
网站图片的虚拟名称可能是"Images/pic31.jpg"。
对应的物理名称是"C:\Documents\MyWebSites\Demo\Images\pic31.jpg"。
Web URL 和 Web 路径
URL和路径
~运算符
使用 ~ 运算符,在编程代码中规定虚拟路径。
如果您使用 ~ 运算符,在您的站点迁移到其他不同的文件夹或者位置时,您可以不用更改您的任何代码
Server.MapPath 方法
Server.MapPath 方法将虚拟路径(/index.html)转换成服务器能理解的物理路径(C:\Documents\MyWebSites\Demo\default.html)。
当您需要打开服务器上的数据文件时,您可以使用这个方法(只有提供完整的物理路径才能访问数据文件):
Href 方法
Href 方法将代码中的使用的路径转换成浏览器可以理解的路径(浏览器无法理解 ~ 运算符)。
您可以使用 Href 方法创建资源(比如图像文件 和 CSS 文件)的路径。
一般会在 HTML 中的 、 和 元素中使用此方法:
全局页面
在 Web 启动之前:_AppStart
大多数的服务器端代码是写在个人网页里边。然而,可以通过在站点根目录创建_appstart页面,这样在站点启动前可以先启动代码执行。如果存在此页面,ASP.NET会在站点中其他页面被请求时,优先运行这个页面。
_AppStart 的典型用途是启动代码和初始化全局数值(比如计数器和全局名称)。
注释 1:_AppStart 的文件扩展名与您的网页一致,比如:_AppStart.cshtml。
注释 2:_AppStart 有下划线前缀。因此,这些文件不可以直接浏览。
在每一个页面之前:_PageStart
和_appstart运行前一样,添加_PageStart的文件。
_PageStart 的典型用途是为一个文件夹中的所有页面设置布局页面,或者在运行某个页面之前检查用户是否已经登录。
它是如何工作的?
当接收到一个请求时,ASP.NET 会首先检查 _AppStart 是否存在。 如果 _AppStart 存在且这是站点接收到的第一个请求,则运行 _AppStart。
然后 ASP.NET 检查 _PageStart 是否存在。如果 _PageStart 存在,则在其它被请求的页面运行之前先运行 _PageStart。
您可以在 _PageStart 中调用 RunPage() 来指定被请求页面的运行位置。否则,默认情况下,被请求页面是在 _PageStart 运行之后才被运行。
表单
创建一个 HTML 输入页面
@{
if (IsPost) {
string companyname = Request["companyname"];
string contactname = Request["contactname"];
Company Name: @companyname
Contact Name: @contactname
}
else
{
}
}
Razor 实例 - 显示图像
@{
var imagePath="";
if (Request["Choice"] != null)
{imagePath="images/" + Request["Choice"];}
}Display Images
实例解释
服务器创建了一个叫 imagePath 的变量。
HTML 页面有一个名为 Choice 的下拉列表(
Reading Data from a File
@foreach (string dataLine in userData)
{
foreach (string dataItem in dataLine.Split(','))
{@dataItem
}
实例解释
使用 Server.MapPath 找到确切的文本文件的路径。
使用 File.ReadAllLines 打开文本文件,并读取文件中的所有行到一个数组中。
数组中的每个数据行中的数据项的数据被显示。
显示 Excel 文件中的数据
使用 Microsoft Excel,您可以将一个电子表格保存为一个逗号分隔的文本文件(.csv 文件)。此时,电子表格中的每一行保存为一个文本行,每个数据列由逗号分隔。
你可以使用上面的实例读取一个 Excel .csv 文件(只需将文件名改成相应的 Excel 文件的名称)。
图表
根据数组创建图表
上代码@{
var myChart = new Chart(width: 600, height: 400)
.AddTitle("Employees")
.AddSeries(chartType: "column",
xValue: new[] { "Peter", "Andrew", "Julie", "Mary", "Dave" },
yValues: new[] { "2", "6", "4", "5", "3" })
.Write();
}
- new Chart 创建一个新的图表对象并且设置它的宽度和高度
- AddTitle 方法指定了图表的标题
- AddSeries 方法向图表中增加数据
- chartType 参数定义图表的类型
- xValue 参数定义 x 轴的名称
- yValues 参数定义 y 轴的名称
- Write() 方法显示图表
根据数据库创建图表
@{
var db = Database.Open("SmallBakery");
var dbdata = db.Query("SELECT Name, Price FROM Product");
var myChart = new Chart(width: 600, height: 400)
.AddTitle("Product Sales")
.DataBindTable(dataSource: dbdata, xField: "Name")
.Write();
}
- var db = Database.Open 打开数据库(将数据库对象赋值给变量 db)
- var dbdata = db.Query 执行数据库查询并保存结果在 dbdata 中
- new Chart 创建一个新的图表对象并且设置它的宽度和高度
- AddTitle 方法指定了图表的标题
- DataBindTable 方法将数据源绑定到图表
- Write() 方法显示图表
除了使用 DataBindTable 方法之外,另一种方法是使用 AddSeries(见前面的实例)。DataBindTable 更容易使用,但是 AddSeries 更加灵活,因为您可以更明确地指定图表和数据:
@{
var db = Database.Open("SmallBakery");
var dbdata = db.Query("SELECT Name, Price FROM Product");
var myChart = new Chart(width: 600, height: 400)
.AddTitle("Product Sales")
.AddSeries(chartType:"Pie",
xValue: dbdata, xField: "Name",
yValues: dbdata, yFields: "Price")
.Write();
}
根据 XML 数据创建图表
@using System.Data;
@{
var dataSet = new DataSet();
dataSet.ReadXmlSchema(Server.MapPath("data.xsd"));
dataSet.ReadXml(Server.MapPath("data.xml"));
var dataView = new DataView(dataSet.Tables[0]);
var myChart = new Chart(width: 600, height: 400)
.AddTitle("Sales Per Employee")
.AddSeries("Default", chartType: "Pie",
xValue: dataView, xField: "Name",
yValues: dataView, yFields: "Sales")
.Write();}
}
WebMail 帮助器
WebMail 帮助器让发送邮件变得更简单,它按照 SMTP(Simple Mail Transfer Protocol 简单邮件传输协议)从 Web 应用程序发送邮件。
如何实现步骤
前提:电子邮件支持
第一:编辑您的 AppStart 页面
@{
WebSecurity.InitializeDatabaseConnection("Users", "UserProfile", "UserId", "Email", true);
WebMail.SmtpServer = "smtp.example.com";
WebMail.SmtpPort = 25;
WebMail.EnableSsl = false;
WebMail.UserName = "support@example.com";
WebMail.Password = "password-goes-here";
WebMail.From = "john@example.com";
}
SmtpServer: 用于发送电子邮件的 SMTP 服务器的名称。
SmtpPort: 服务器用来发送 SMTP 事务(电子邮件)的端口。
EnableSsl: 如果服务器使用 SSL(Secure Socket Layer 安全套接层)加密,则值为 true。
UserName: 用于发送电子邮件的 SMTP 电子邮件账户的名称。
Password: SMTP 电子邮件账户的密码。
From: 在发件地址栏显示的电子邮件(通常与 UserName 相同)
第二:创建一个电子邮件输入页面
第三:创建一个电子邮件发送页面