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 文件中的 <connectionStrings> 元素添加如下元素:
<add name="MovieDBContext"
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"?>
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />

<add invariant="System.Data.SqlServerCe.4.0"
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" />

</DbProviderFactories>
</system.data>
</configuration>
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 中的 <a>、<img> 和 <link> 元素中使用此方法:
全局页面
在 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 输入页面
<html>
<body>
@{
if (IsPost) {
string companyname = Request["companyname"];
string contactname = Request["contactname"];
<p>You entered: <br />
Company Name: @companyname <br />
Contact Name: @contactname </p>
}
else
{
<form method="post" action="">
Company Name:<br />
<input type="text" name="CompanyName" value="" /><br />
Contact Name:<br />
<input type="text" name="ContactName" value="" /><br /><br />
<input type="submit" value="Submit" class="submit" />
</form>
}
}
</body>
</html>
Razor 实例 - 显示图像
@{
var imagePath="";
if (Request["Choice"] != null)
{imagePath="images/" + Request["Choice"];}
}
<!DOCTYPE html>
<html>
<body>
<h1>Display Images</h1>
<form method="post" action="">
I want to see:
<select name="Choice">
<option value="Photo1.jpg">Photo 1</option>
<option value="Photo2.jpg">Photo 2</option>
<option value="Photo3.jpg">Photo 3</option>
</select>
<input type="submit" value="Submit" />
@if (imagePath != "")
{
<p>
<img src="@imagePath" alt="Sample" />
</p>
}
</form>
</body>
</html>
实例解释
服务器创建了一个叫 imagePath 的变量。
HTML 页面有一个名为 Choice 的下拉列表(<select> 元素)。它允许用户根据自己的意愿选择一个名称(如 Photo 1),当页面被提交到 Web 服务器时,则传递了一个文件名(如 Photo1.jpg)。
Razor 代码通过 Request["Choice"] 读取 Choice 的值。如果通过代码构建的图像路径(images/Photo1.jpg)有效,就把图像路径赋值给变量 imagePath。
在 HTML 页面中,<img> 元素用来显示图像。当页面显示时,src 属性用来设置 imagePath 变量的值。
<img> 元素是在一个 if 块中,这是为了防止显示没有名称的图像,比如页面第一次被加载显示的时候。
对象
某些 Page 对象方法
方法 描述
href 使用指定的值创建 URL。
RenderBody() 呈现不在布局页命名区域的内容页的一部分。
RenderPage(page) 在另一个页面中呈现某一个页面的内容。
RenderSection(section) 呈现布局页命名区域的内容。
Write(object) 将对象作为 HTML 编码字符串写入。
WriteLiteral 写入对象时优先不使用 HTML 编码。
某些 Page 对象属性
属性 描述
isPost 如果客户端使用的 HTTP 数据传输方法是 POST 请求,则返回 true。
Layout 获取或者设置布局页面的路径。
Page 提供了对页面和布局页之间共享的数据的类似属性访问。
Request 为当前的 HTTP 请求获取 HttpRequest 对象。
Server 获取 HttpServerUtility 对象,该对象提供了网页处理方法。
Page 对象的 Page 属性
Page 对象的 Page 属性,提供了对页面和布局页之间共享的数据的类似属性访问。
属性
Page.Title
Page.Version
Page.anythingyoulike
文本
手动添加一个文本文件
在下面的例子中,您将需要一个文本文件。
在您的网站上,如果没有 App_Data 文件夹,请创建一个。在 App_Data 文件夹中,创建一个名为 Persons.txt 的文件。
添加以下内容到文件中:
显示文本文件中的数据
@{
var dataFile = Server.MapPath("~/App_Data/Persons.txt");
Array userData = File.ReadAllLines(dataFile);
}

<!DOCTYPE html>
<html>
<body>
<h1>Reading Data from a File</h1>
@foreach (string dataLine in userData)
{
foreach (string dataItem in dataLine.Split(','))
{@dataItem <text>&nbsp;</text>}
<br />
}
</body>
</html>
实例解释
使用 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 相同)
第二:创建一个电子邮件输入页面
第三:创建一个电子邮件发送页面

posted @ 2022-03-18 13:25  面包屑zz  阅读(64)  评论(0)    收藏  举报