ASPNETMVCSHOP

在进行ASP.NET MVC开发时,遇到了以下知识点,现摘记如下。


ASP.NET MVC 是微软官方提供的以MVC模式为基础的ASP.NET Web应用程序(Web Application)框架,它由Castle的MonoRail而来,目前最新版本是ASP.NET MVC 5.1。

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式。
  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
  通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
  通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
  通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。




1.System.ComponentModel命名空间

提供用于实现组件和控件运行时和设计时行为的类。此命名空间包括用于实现属性和类型转换器、绑定到数据源以及授权组件的基类和接口。

该命名空间中的类分为以下类别:


2.System.ComponentModel.DataAnnotations命名空间。

提供用于为实体类定义元数据的特性类。


3. 注解[Key] 用于标示主键。


4.注解[Description] 表示可视化设计器在引用组件成员时可以显示指定的说明。

数据验证相关的数据注解

[Remote]使用 jQuery 验证插件远程验证程序的特性
[FileExtension]验证文件扩展名
[Compare]比较两个属性的值
[RegularExpression]使用正则表达式验证
[CustomValidation] 自定义验证方法
[DataType]指定要与数据字段关联的附加类型的名称
[EmailAddress]电子邮件地址(相当于[DataType(DataType.Email)])
[Phone]电话(同上)
[CreditCard]信用卡号码(同上)
[Url] 验证URL(同上)
[MemberShipPassword]        验证密码字段是否满足成员资格提供程序的当前密码要求

 

 

 

 

 





数据映射相关的数据注解:

[Key]主键字段
[Column]数据库列属性映射
[NotMapped]不要创建对应的字段
[Table]指定类将映射到的数据库表
[ForeignKey]表示关系中用作外键的属性
[DatabaseGenerated]           指定数据库生成属性值的方式(EF不追踪属性的变化)

 

 





数据显示相关的数据注解:

[DisplayName]指定本地化的字符串(习惯用语类)
[Display]指定本地化的字符串(习惯用语属性)
[DisplayFormat]设置数据字段的格式
[ReadOnly] 指定该特性所绑定到的属性是只读属性还是读/写属性
[EditAble]指示数据字段是否可编辑
[HiddenInput]指示是否应将属性值或字段值呈现为隐藏的 input 元素
[ScaffoldColumn]                   指定类或数据列是否使用基架
[UIHint] 指定动态数据用来显示数据字段的模板

 

 

 

 

 

 [HttpPost]                       标识是在Controller中的相应方法上注释表单提交方式为 post

 

其他

[DisplayColumn]                   将所引用的表中显示的列指定为外键列
[Description]

可视化设计器在引用组件成员时可以显示指定的说明

(命名空间:System.ComponentModel.DescriptionAttribute)





5.C#语法中一个个问号(?)的运算符是指:可以为 null 的类型。


6.The System.ComponentModel.DataAnnotations.Schema namespace provides support for attribute classes that are used to define metadata for ASP.NET MVC and ASP.NET data controls.


7.ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动态解析。所以在视图中获取它的数据时候不需要进行类型转换.

ViewBag是一个很神奇的东西,它是一个动态对象。简单点说就是你可以给它添加任何属性,这个属性可以是任何类型。

ViewBag的主要用途就是在Controller里给ViewBag添加属性值,并在View中读取这些值并显示出来。


ViewDataViewBag
它是Key/Value字典集合它是dynamic类型对像
从Asp.net MVC 1 就有了ASP.NET MVC3 才有
基于Asp.net 3.5 framework基于Asp.net 4.0与.net framework
ViewData比ViewBag快ViewBag比ViewData慢
在ViewPage中查询数据时需要转换合适的类型在ViewPage中查询数据时不需要类型转换
有一些类型转换代码可读性更好



8.Membership.ValidateUser 方法 (String, String)验证提供的用户名和密码是有效的。命名空间: System.Web.Security



9.FormsAuthentication.SetAuthCookie 方法(String, Boolean)为提供的用户名创建一个身份验证票证,并将该票证添加到响应的 Cookie 集合中或 URL 中(如果使用的是无 Cookie 身份验证)。命名空间: System.Web.Security

publicstaticvoid SetAuthCookie(
string userName,
bool createPersistentCookie
)

//设置用户的 cookie 的值 FormsAuthentication.SetAuthCookie(loginName,false);

//获取用户的 cookieHttpCookie cookie= FormsAuthentication.GetAuthCookie(loginName,false);

//FormsAuthentication .SignOut只是注销掉此用户的登录信息,而且这个时间是在Application的Authentication事件后执行,当你再次操作时,因为用户的登录信息已经注销掉,通不过Form验证才会跳转到登录页面。








10.在ASP.NET MVC中,要从一个Action跳转到另一个Action,通常是用一系列以“Redirect”开头的方法Redirect/RedirectToAction/RedirectToRoute之类的。

但是使用Redirect系列的方法进行跳转时,默认是使用GET方法的,也就是说,如果你的跳转请求带有参数,那么这些参数将全部暴露在跳转后的url中,增加了不安全性(特别是如果参数中包含密码、密钥等等敏感数据)

于是就想到了用POST方法传递数据,这样至少一般的访问者无法从url中获取敏感信息。但是仔细查阅了MSDN和StackOverflow,得到的答案是“Redirect方法不支持POST”。

好在StackOverflow上找到一个回答 点我  ,倒是给我一些启发。直接POST不行,那就间接POST,先通过一个GET方法获取某个页面,然后以这个页面为中介将数据POST给真正要处理请求的页面。


11.ModelState.AddModelError("userPwd", "请输入密码!"); ModelState是一个字典类型,这句话的作用是向ModelState中添加一条错误信息,第一个参数是Key,第二个参数是Value。



12. throw new System.NotImplementedException(); 就是没有实现接口或抽象类要求的方法时,出现的异常.


13.AjaxOptions 类 表示用于在 ASP.NET MVC 应用程序中运行 Ajax 脚本的选项设置。 命名空间:   System.Web.Mvc.Ajax

14.MVC视图中,Javascripts代码被放于下面的Razor代码中(@section Scripts{})。通过@script.Render方法,你可以预定义一组js文件,在最终页面上,asp.net mvc自身会采用比较优化的压缩技术和缓存技术,将多个js压缩优化并且整合为1个体积较小的js,但对于外部使用来说,功能是不会出现任何区别的,从而提高了页面体验。而压缩和缓存的过程都是通过框架自动实现的,你只需要按照缩进和自己的习惯写优雅的js代码即可。


15. //@model 参考型别是IEnumerable泛型(VS2012), 如果需要转换型别,可以使用ToList()转换成List泛型对象。


16.Html.BeginForm与Ajax.BeginForm都是MVC架构中的表单元素,它们从字面上可以看到区别,即Html.BeginForm是普通的表单提交,而Ajax.BeginForm是支持异步的表单提交,这对于我们开发者来说是一个福音,我们不用再自己去用JQ代码了,直接用MVC自代的Ajax.BeginForm就可以很容易的完成一个异步的表单提交动作。
@using (Html.BeginForm()) {} // 提交到当前页面
 
@using (Html.BeginForm( new {} )) {} // 提交到当前页面,并可以传递参数
 
@using (Html.BeginForm( " action ", " controller ")) {} // 提交到指定controller下的action中

@using (Html.BeginForm( " action ", " controller ",FormMethod.POST)) {} // 提交到指定controller下的action中,并指定提交方式


17.:@Html.ValidationSummary()用于返回表单正在背景考证的效果。

1.input注明要验证是属于前台的,当某各原因导致前台无法进行验证,比如js没有成功加载的, 

当后台if (ModelState.IsValid)失败后,错误信息就会显示到 @Html.ValidationSummary() 

2.当前后台验证都通过,但某些逻辑验证没有通过,比如用记名密码错误的,可以手工添加错误信息, 

ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");这个也会显示到@Html.ValidationSummary()



18.Razor通过在代码块中使用“@:字符序列”来显式指明内容块的开始。@:序列表明该行后面的内容应该被视为内容块。


19.FormCollection用来在controller中获取页面表单元素的数据。它是表单元素的集合,包括<input type="submit" />元素。

Represents a collection of Form objects.

Namespace:   System.Windows.Forms


20.编辑程序时,只有生成了解决方案,才能选择视图创建时等的模型类。


21.在Html辅助方法中若要输出减号,必须用"_",即下划线代替.


22.并不是加上DataType属性的ErrorMessage参数,就一定会在View页面中显示错误信息,因为VS的版本限制问题,有些不支持页面的JAVASCRIPT.此时,可以利用TextBoxFor辅助方法,并指定一个data-val-email属性即可.如@Html.TextBoxFor(model=>model.email,new{data_val_email="请输入Email地址"})

同时,也可以通过更改script代码或者Jquery的有效验证信息来操作.



23.location.reload();

reload()方法用于刷新当前文档。

reload() 方法类似于你浏览器上的刷新页面按钮。

如果把该方法的参数设置为 true,那么无论文档的最后修改日期是什么,它都会绕过缓存,从服务器上重新下载该文档。这与用户在单击浏览器的刷新按钮时按住 Shift 健的效果是完全一样。



24.ASP MVC中NT$@(Model[i].Product.Price)什么意思, 貌似NT表示后面的符号直接输出.


25.由于案例中Product&ProductCategory之间是多对一的关系,因此,可以在该数据模型中添加导览属性(navigation Property),

ProductCategory中为: public virtual ICollection<Product> Products(get;set;);

Product中为: public virtual ProductCategory ProductCategory(get;set;);

其中virtual关键字表示延迟装入功能.



26.应用程序启动时自动升级数据库(通过应用所有挂起的迁移)。可通过注册 MigrateDatabaseToLatestVersion 数据库初始值设定项来实现这一点。数据库初始值设定项只是包含用于确保数据库安装正确的某种逻辑。首次在应用程序进程 (AppDomain) 中使用上下文时,将运行此逻辑。

即在文件Global.asax 中的Application_Start方法上加上System.Data.Entity.Database.SetInitializer()方法,并添加System.Data.Entity.MigrateDatabaseToLatestVersion<BlogContext, Configuration>()参数,而参数System.Data.Entity.DropCreatDatabaseIfModelChanges是重新建立,不利于保存原始数据.

即最终的代码为:System.Data.Entity.Database.SetInitializer(new System.Data.Entity.MigrateDatabaseToLatestVersion<Model.MvcShoppingContext, Migrations.Configuration>() );


27.MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来, 经md2、md3和md4发展而来。引用using System.Security.Cryptography;

C# md5加密:
string a; //加密前数据
string b; //加密后数据
b=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(a,"MD5")



28.UriBuilder 类, 提供用于统一资源标识符 (Uri) 自定义的构造函数,并修改 UriUri 类。命名空间:  System



UriBuilder 类提供了一种方便的方式来修改的内容 Uri 而无需创建一个新的实例 Uri 为每次修改的实例。

UriBuilder 属性可用来为只读的读/写访问Uri 属性,以便可以修改它们。



名称说明
System_CAPS_pubmethodUriBuilder()

初始化 UriBuilder 类的新实例。

System_CAPS_pubmethodUriBuilder(String)

用指定的 URI 初始化 UriBuilder 类的新实例。

System_CAPS_pubmethodUriBuilder(String, String)

新实例初始化 UriBuilder 与指定的方案和宿主的类。

System_CAPS_pubmethodUriBuilder(String, String, Int32)

新实例初始化 UriBuilder 类,具有指定的方案、 主机和端口。

System_CAPS_pubmethodUriBuilder(String, String, Int32, String)

新实例初始化 UriBuilder 类,具有指定的方案、 主机、 端口号和路径。

System_CAPS_pubmethodUriBuilder(String, String, Int32, String, String)

新实例初始化 UriBuilder 类使用指定的方案、 主机、 端口号、 路径和查询字符串或段标识符。

System_CAPS_pubmethodUriBuilder(Uri)

使用指定的 UriBuilder 实例初始化Uri 类的新实例。


名称说明
System_CAPS_pubpropertyFragment

获取或设置 URI 的片段部分。

System_CAPS_pubpropertyHost

获取或设置的域名系统 (DNS) 主机名或服务器的 IP 地址。

System_CAPS_pubpropertyPassword

获取或设置与用户访问 URI 相关联的密码。

System_CAPS_pubpropertyPath

获取或设置由 URI 引用的资源的路径。

System_CAPS_pubpropertyPort

获取或设置 URI 的端口号。

System_CAPS_pubpropertyQuery

获取或设置在 URI 中包括的任何查询信息。

System_CAPS_pubpropertyScheme

获取或设置 URI 的方案名称。

System_CAPS_pubpropertyUri

获取 Uri 构造由指定的实例 UriBuilder 实例。

System_CAPS_pubpropertyUserName

与用户访问 URI 相关联的用户名。



29.SmtpClient 类 允许应用程序使用简单邮件传输协议 (SMTP) 发送电子邮件。命名空间: System.Net.Mail

构造函数如下:

名称说明
System_CAPS_pubmethodSmtpClient()

新实例初始化 SmtpClient 类通过使用配置文件设置。

System_CAPS_pubmethodSmtpClient(String)

新实例初始化 SmtpClient 通过使用指定的 SMTP 服务器发送电子邮件的类。

System_CAPS_pubmethodSmtpClient(String, Int32)

新实例初始化 SmtpClient 通过使用指定的 SMTP 服务器和端口来发送电子邮件的类。


属性如下:

名称说明
System_CAPS_pubpropertyClientCertificates

指定应使用哪个证书来建立安全套接字层 (SSL) 连接。

System_CAPS_pubpropertyCredentials

获取或设置用来对发件人进行身份验证的凭据。

System_CAPS_pubpropertyDeliveryFormat

获取或设置所使用的传递格式 SmtpClient 发送电子邮件。

System_CAPS_pubpropertyDeliveryMethod

指定如何发送的电子邮件将处理消息。

System_CAPS_pubpropertyEnableSsl

指定是否 SmtpClient 使用安全套接字层 (SSL) 加密的连接。

System_CAPS_pubpropertyHost

获取或设置一个或多个 SMTP 交易记录所用的主机的 IP 地址。

System_CAPS_pubpropertyPickupDirectoryLocation

获取或设置应用程序在其中保存邮件以处理由本地 SMTP 服务器的文件夹。

System_CAPS_pubpropertyPort

获取或设置用于 SMTP 事务的端口。

System_CAPS_pubpropertyServicePoint

获取用于传输电子邮件的网络连接。

System_CAPS_pubpropertyTargetName

获取或设置服务提供程序名称 (SPN) 时使用扩展的保护用于进行身份验证。

System_CAPS_pubpropertyTimeout

获取或设置一个值,指定的后的时间量同步 Send 调用会超时。

System_CAPS_pubpropertyUseDefaultCredentials

获取或设置 Boolean 值,该值控制是否 DefaultCredentials 随请求一起发送。


方法:

名称说明
System_CAPS_pubmethodDispose()

将一条 QUIT 消息发送到 SMTP 服务器、 正常结束 TCP 连接,并释放所有资源的当前实例所使用的SmtpClient 类。

System_CAPS_protmethodDispose(Boolean)

将一条 QUIT 消息发送到 SMTP 服务器、 正常结束 TCP 连接时,释放使用的当前实例的所有资源SmtpClient 类,并可根据需要释放托管资源。

System_CAPS_pubmethodEquals(Object)

确定指定的对象是否等于当前对象。(继承自 Object。)

System_CAPS_protmethodFinalize()

在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。(继承自Object。)

System_CAPS_pubmethodGetHashCode()

作为默认哈希函数。(继承自 Object。)

System_CAPS_pubmethodGetType()

获取当前实例的 Type(继承自 Object。)

System_CAPS_protmethodMemberwiseClone()

创建当前 Object 的浅表副本。(继承自 Object。)

System_CAPS_protmethodOnSendCompleted(AsyncCompletedEventArgs)

引发 SendCompleted 事件。

System_CAPS_pubmethodSend(MailMessage)

将指定的消息发送到 SMTP 服务器以进行传递。

System_CAPS_pubmethodSend(String, String, String, String)

将指定的电子邮件发送到 SMTP 服务器以进行传递。 邮件发件人、 收件人、 主题和消息正文使用指定String 对象。

System_CAPS_pubmethodSendAsync(MailMessage, Object)

将指定的电子邮件发送到 SMTP 服务器以进行传递。 此方法不会阻止调用线程,并允许调用方将对象传递给该操作完成时调用的方法。

System_CAPS_pubmethodSendAsync(String, String, String, String, Object)

将一封电子邮件发送到 SMTP 服务器以进行传递。 邮件发件人、 收件人、 主题和消息正文使用指定String 对象。 此方法不会阻止调用线程,并允许调用方将对象传递给该操作完成时调用的方法。

System_CAPS_pubmethodSendAsyncCancel()

取消异步操作以发送电子邮件。

System_CAPS_pubmethodSendMailAsync(MailMessage)

将指定的消息发送到 SMTP 服务器以进行异步操作的形式传递。

System_CAPS_pubmethodSendMailAsync(String, String, String, String)

将指定的消息发送到 SMTP 服务器以便以异步操作的形式交付。 邮件发件人、 收件人、 主题和消息正文使用指定String 对象。

System_CAPS_pubmethodToString()

返回表示当前对象的字符串。(继承自 Object。)


30.MailMessage 类 表示可以使用 SmtpClient 类发送的电子邮件。 命名空间:   System.Net.Mail


构造函数:

名称说明
System_CAPS_pubmethodMailMessage()

初始化 MailMessage 类的空实例。

System_CAPS_pubmethodMailMessage(MailAddress, MailAddress)

使用指定的 MailAddress 类对象初始化 MailMessage 类的新实例。

System_CAPS_pubmethodMailMessage(String, String)

使用指定的 String 类对象初始化 MailMessage 类的新实例。

System_CAPS_pubmethodMailMessage(String, String, String, String)

初始化 MailMessage 类的新实例。


属性:

名称说明
System_CAPS_pubpropertyAlternateViews

获取用于存储邮件正文的替代形式的附件集合。

System_CAPS_pubpropertyAttachments

获取用于存储附加到此电子邮件的数据的附件集合。

System_CAPS_pubpropertyBcc

获取包含此电子邮件的密件抄送 (BCC) 收件人的地址集合。

System_CAPS_pubpropertyBody

获取或设置邮件正文。

System_CAPS_pubpropertyBodyEncoding

获取或设置用于邮件正文的编码。

System_CAPS_pubpropertyBodyTransferEncoding

获取或设置用于消息正文的传输编码。

System_CAPS_pubpropertyCC

获取包含此电子邮件的抄送 (CC) 收件人的地址集合。

System_CAPS_pubpropertyDeliveryNotificationOptions

获取或设置此电子邮件的发送通知。

System_CAPS_pubpropertyFrom

获取或设置此电子邮件的发信人地址。

System_CAPS_pubpropertyHeaders

获取与此电子邮件一起传输的电子邮件标头。

System_CAPS_pubpropertyHeadersEncoding

获取或设置此电子邮件的用户定义的自定义标题使用的编码。

System_CAPS_pubpropertyIsBodyHtml

获取或设置指示邮件正文是否为 Html 格式的值。

System_CAPS_pubpropertyPriority

获取或设置此电子邮件的优先级。

System_CAPS_pubpropertyReplyTo

已过时。 获取或设置邮件的回复地址。

System_CAPS_pubpropertyReplyToList

获取或设置邮件的回复地址的列表。

System_CAPS_pubpropertySender

获取或设置此电子邮件的发件人地址。

System_CAPS_pubpropertySubject

获取或设置此电子邮件的主题行。

System_CAPS_pubpropertySubjectEncoding

获取或设置此电子邮件的主题内容使用的编码。

System_CAPS_pubpropertyTo

获取包含此电子邮件的收件人的地址集合。(既然是集合,就拥有集合的相关操作方法,如ADD等)


方法:

名称说明
System_CAPS_pubmethodDispose()

释放由 MailMessage 使用的所有资源。

System_CAPS_protmethodDispose(Boolean)

释放由 MailMessage 占用的非托管资源,还可以另外再释放托管资源。

System_CAPS_pubmethodEquals(Object)

确定指定的对象是否等于当前对象。(从 Object 继承。)

System_CAPS_protmethodFinalize()

在垃圾回收将某一对象回收前允许该对象尝试释放资源并执行其他清理操作。(从 Object 继承。)

System_CAPS_pubmethodGetHashCode()

作为默认哈希函数。(从 Object 继承。)

System_CAPS_pubmethodGetType()

获取当前实例的 Type(从 Object 继承。)

System_CAPS_protmethodMemberwiseClone()

创建当前 Object 的浅表副本。(从 Object 继承。)

System_CAPS_pubmethodToString()

返回表示当前对象的字符串。(从 Object 继承。)



31.#if与#endif指示词可以设置特定程序代码区段是否要出现在特定方案配置下.


32.PagedList<T> 类  表示分页的列表,其中包含项和一个继续标记的列表。命名空间:   System.Fabric.Query,  也可以通过NUGET管理器添加.

MVC中操作分页可以通过以下三个过程进行.

32.1  取得IEnumerable或IQueryable型别的源数据,或继承这两个型别的子类别.

32.2 通过ToPagedList扩充方法,取得分页后的结果信息,并将信息传入View里.

32.3 在View页面中通过@Html.PagedListPager辅助方法输出分页所需的分页导览链接.



33.jQuery函数对象可以用来访问JQuery特性. 当首次使用jQuery函数时,可能会感到困惑.部分原因可能是这个称为jQuery的函数用$符号作为别名(因为$符号只需要较少的输入,它在JavaScript语法中是一个舍法的函数名).更令人困惑的是我们几乎可以向$函数传递任何类型的参数,并且该函数还能够推导出传递这个参数的意图.



34.路由的作用:
34.1匹配传入的请求,并把这些请求映射到控制器操作.
34.2构造传出的URL, 用来响应控制器中的操作.



35.EF中的Dbquery类支持延迟加载, 因此,大部分查询中使用的都是Dbquery类,且有延迟加载功能.


36.SQO 标准查询运算符由一系列叫做API的方法组成,它能让我们查询任何.NET数组或集合。Linq语句在编译时亦会先转换成SQO语句.

37. 在ASP.NET.MVC中,Content()可以用来输出字符串.

38.在EF的操作中,进行CRUD操作中,需要进行EF包装容器的中介操作,即db.model.attach()操作.



39. 在Linq查询操作中,一般只能使用属性,不能调用方法来做为查询条件等.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值