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 文件中的 元素添加如下元素:
connectionString="Data Source=|DataDirectory|Movies.sdf"
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"?>



name="Microsoft SQL Server Compact 4.0"
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
基础
什么是?
创建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"];

You entered:

Company Name: @companyname

Contact Name: @contactname


}
else
{

Company Name:



Contact Name:






}
}


Razor 实例 - 显示图像
@{
var imagePath="";
if (Request["Choice"] != null)
{imagePath="images/" + Request["Choice"];}
}



Display Images



I want to see:


@if (imagePath != "")
{


Sample


}



实例解释
服务器创建了一个叫 imagePath 的变量。
HTML 页面有一个名为 Choice 的下拉列表(