pro asp.net mvc 5笔记
1.Ninject条件绑定方法
When(predicate)
WhenClassHas<T>()
WhenInj ectedInto<T>()
例:
kernel.Bind<IDiscountHelper>().To<FlexibleDiscountHelper>()
.WhenInj ectedInto<LinqValueCalculator>();
2.Ninject对象生命周期
InTransientScope() //默认值, 短暂的周期, 每次依赖都创建一个新的
InSingletonScope()
ToConstant(object)
InThreadScope()
InRequestScope()
3.Moq
动态实现接口
4.EntityFramework 详情:
http://msdn.microsoft.com/data/ef
5.创建链接的两个方法:
@Html.ActionLink
@Html.RouteLink
6.创建表单并添加隐藏字段,随Form提交至后台
Html.BeginForm // BeginForm可以指定要提交到的路径:BeginForm("action","controller");
// 否则将默认提交到当前控制器的当前方法
@Html.HiddenFor
@Html.Hidden // 经常Hidden一个当前地址,传递到后台处理完后再跳转回该页面,也就是Redirect(returnUrl)
7.ModelBinder
·实现IModelBinder接口
·在Global.asax中的Application_Start方法中添加Binder(ModelBinders.Binders.Add)
8.HiddenFor 如果用model.就只使用属性名,否则会使用全名称做参数名
@Html.HiddenFor(x=>line.Product.ProductID) // 参数名为 line.Product.ProductID
9.遍历Model的属性
ViewData.ModelMedadata.Properties
ModelMetadata常用属性:PropertyName, DisplayName
10.ModelState
ModelState.IsValid
ModelState.AddModelError
11.服务端验证
ModelState.AddModelError 把错误信息以键值对的形式从Controller传递到View
@Html. ValidationSummary() // Html.BeginForm中的第一行,提示消息全部出现在顶部
@Html.ValidationMessage(property.PropertyName) // 提示消息出现在每个控件下面
12.Bootstrap里面的大小适用
xs <768
sm >768
md >992
lg >1200
13.Razor会自动移除null值的属性
<div class ="@wrapperClasses"> // 如果wrapperClasses为null,将智能地移除class属性
14.视图传递过来的路由信息:
ViewContext.RouteData.Values["key"];
15.给html赋值属性,Razor会自动识别_转化为-
@Html.RouteLink("Link Text", routeObject, htmlAttr); // new {data_transition="fade"}
16.MVC能自动识别访问来自于Mobile还是Desktop,如果是Mobile,会自动尝试Mobile后缀的文件
_Layout.Mobile.cshtml // Layout文件
17.单次Http请求中保存数据,TempData
RedirectToAction("Index"); // ViewBag用在控制器和视图之间传递信息,但是转向之后就切换了控制器
// 之前在ViewBag中设置的信息就自然无效了,不会在控制器间传递
// 用法类似Session:TempData["message"]
18.客户端验证
<script src="∼/Scripts/jquery-1.9.1.js"></script>
<script src="∼/Scripts/jquery.validate.js"></script>
<script src="∼/Scripts/jquery.validate.unobtrusive.js" ></script>
---------------------------------------------路由控制(URL Routing)-----------------------------------------------------------
1.使用*来匹配所有
routes.MapRoute(
name: "All",
url: "{*catchall}", // 只要是*号前缀即可,后面可跟任何字符串,甚至是不跟
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
2.指定命名空间内搜索控制器:
MapRoute的namespaces参数:new[]{"URLsAndRoutes.AdditionalControllers"}
3.为控制器添加约束(MapRoute的constraints参数):
正则约束:new {controller = "^H.*", action = "^Index$|^About$"} // 正则匹配
http请求方法约束:httpMethod = new HttpMethodConstraint("GET", "POST") // 名字可以不是httpMethod,只要值是HttpMethodConstraint类型的实例
类型和值的约束:id = new RangeRouteConstraint(10, 20); // System.Web.Mvc.Routing.Constraints下有更多的约束类
自定义约束:继承自IRouteConstraint接口,实现Match方法。
5.属性路由
RoutConfig.cs中调用MapMvcAttributeRoutes方法
controller的方法添加Route属性:
[Route("Test")] // 匹配值为Test的路径
public ActionResult Index() {}
添加限制:
[Route("Test/{id:int}")]
多个限制:
[Route("Test/{user:alpha:length(6)}")]
在Controller上添加前缀属性:
[RoutePrefix("Users")] // 这样该控制器下的方法将匹配Users前缀的路径:Users/xxx
public class CustomerController : Controller {}
指定某个方法不受前缀影响:
[Route("~/Test")]
public ActionResult Index(){}
5.Area的默认命名空间为:UrlsAndRoutes.Areas.{{AreaName}}.Controllers
Controller的默认命名空间为:UrlsAndRoutes.Controllers
*所以如果使用了Area, RouteConfig.cs中注册路由时应当声明namespace
否则该route将在所有命名空间下查找controller,在Controller和Area查找到同名Controller时会报错
6.Authentication、Authorization
Authentication在Authorization之前
-----------------------------------------------------Helper Methods-------------------------------------------------
1.inline helper:
@helper helperFunName(string[] items){
@foreach(string str in items){
<li>@str </li>
}
}
2.扩展方法:
public static MvcHtmlString ListArrayItems(this HtmlHelper html, string[] list){
// 对HtmlHelper类扩展方法
}
*扩展方法需要引入命名空间,或者在views/web.config中引入
*可能存在编码问题破坏html文档,需要html.Encode一下或者返回类型改为string
3.@{Html.BeginForm();}
xxx
@{Html.EndForm();}
等同于@using(Html.BeginForm()){}
*BeginForm BeginRouteForm("指定路由名")
4.@Html.TextBox("property")
先后从ViewBag和Model中查找
5.
@Html.LabelForModel()
*Model类需加属性:[DisplayName("New Person")]
@Html.EditorForModel()
*创建2个div(修饰符分别为editor-label何editor-field),分别包含label和input
6.常见属性:
[HiddenInput(DisplayValue=false)]
[Display{Name="First")]
[DataType(DataType.Date)]
7.EditorFor创建出来的可以使用自定义模板
*Shared/EditorTemplates下寻找该类型的模板
*模板文件名需与类型名字保持一致
8.为EditorFor的Model指定显示类:
[MetadataType(typeof(PersonMetaData))]
-------------------------------------------------URL and Ajax------------------------------------------------------
1.常用方法
Url.Content("~/Content/Site.css") /Content/Site.css
Html.ActionLink("My Link", "Index", "Home") <a href="/">My Link</a>
Url.Action("GetPeople", "People") /People/GetPeople
Url.RouteUrl(new {controller = "People", action="GetPeople"}) /People/GetPeople
Html.RouteLink("My Link", new {controller = "People", action="GetPeople"}) <a href="/People/GetPeople">My Link</a>
Html.RouteLink("My Link", "FormRoute", new {controller = "People", action="GetPeople"}) <a href="/app/forms/People/GetPeople">My Link</a>
----------------------------------------------------Model Binding-----------------------------------------------------------
1.依次从以下处查找参数:
Request.Form
RouteData.Values
Request.QueryString
Request.Files
2.绑定可以在Controller中指定,也可以在Model中指定:
Controller:
public ActionResult DisplaySummary([Bind(Prefix="HomeAddress", Exclude="Country")]AddressSummary summary)
{
return View(summary);
}
Model:
[Bind(Include="City")]
public class AddressSummary
{
public string City { get; set; }
public string Country { get; set; }
}
3.绑定Array和List:
name = "names" // names是Action的参数名(Array或List)
*如果是自定义的Model的属性,则需要设置成name="[0].Property"
4.可以手动控制绑定:
UpdateModel(addresses, new FormValueProvider(ControllerContext));
*各自对应的Provider:
Request.Form FormValueProvider
RouteData.Values RouteDataValueProvider
Request.QueryString QueryStringValueProvider
Request.Files HttpFileCollectionValueProvider
5.自定义绑定:
继承IValueProvider:
bool ContainsPrefix(string prefix);
ValueProviderResult GetValue(string key);
再实现一个ValueProviderFactory,在ValueProviderResult注册该Factory
6.还可以为指定类型绑定Model值
----------------------------------------------------Model Validation-----------------------------------------------------------
1.常用的类及属性:
ModelState
Html.ValidationSummary
Html.ValidationMessageFor
ValidationAttribute
IvalidatableObject
RemoteAttribute
2.Model验证常用属性:
Required(ErrorMessage="message")
MustBeTrue(ErrorMessage="You must accept")
*可以自定义属性,继承ValidationAttribute,重载IsValid方法即可
----------------------------------------------------Model Validation-----------------------------------------------------------
1.启用Bundles:
Web.Config -> pages -> namespaces
<add namespace="System.Web.Optimization"/>
Web.Config -> system.web
<compilation debug="false" targetFramework="4.5.1" />
*false则合并压缩成一个文件
pro asp.net mvc 5笔记的更多相关文章
- 《Pro ASP.NET MVC 4》异常整理
最近在和同学一起研究毕业设计,准备模仿<Pro ASP.NET MVC 4>里面的SportsStore设计模式和测试驱动开发. 由于和书中VS版本不同,发现不少问题,在此总结. 用户代码 ...
- ASP.NET MVC学习笔记-----Filter2
ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...
- ASP.NET MVC学习笔记-----Filter
ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...
- ASP.NET MVC学习笔记-----Filter(2)
接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.11.ASP.NET MVC3的细节:概览MVC项目
书Adam The Definitive Guide to HTML5 Adam Applied ASP.NET 4 in Context and Pro ASP.NET 4 到此为止,我们已经学了为 ...
- Pro ASP.NET MVC 5 Framework.学习笔记.6.3.MVC的必备工具
每个MVC程序员的军火库中,都有这三个工具:一个依赖注入(DI)容器,一个单元测试框架,一个模拟工具. 1.准备一个示例项目 创建一个ASP.NET MVC Web Application的Empty ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.12.ASP.NET MVC3的细节:URLs,Routing和Areas
Adam Applied ASP.NET 4 in Context 1 介绍Routing系统 在引入MVC之前,ASP.NET假定被请求的URLs和服务器硬盘上的文件之间有着直接关系.服务器的任务是 ...
随机推荐
- 深入剖析Java编程中的中文问题及建议最优解决方法
摘录自:http://fafeng.blogbus.com/logs/3062998.html http://www.blogbus.com/fafeng-logs/3063006.html 深入剖析 ...
- 【js 实践】js 实现木桶布局
还有两个月左右就要准备实习了,所以特意练一练,今天终于搞定了js 的木桶布局了 这一个是按照一个插件的规格去写的以防以后工作需要,详细的解释在前端网这里 http://www.qdfuns.com/n ...
- JavaScript学习日志:关于js分号
javascript有自动添加分号的功能,但是不是所有情况都会自动添加,要区分: 1,如果语句独占一行 如果当前行内的语句能够被js正确解析,那么就会在句尾添加一个分号. (如何判断是否正确解析?你在 ...
- Intel系列微处理器的三种工作模式
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- C/C++ typedef
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- Git-远程仓库的使用
Git修改远程仓库地址 1.修改命令 git remote set-url origin [url] 例如:$ git remote set-url origin gitlab@gitlab.chum ...
- [转]linux下centos服务器安全设置
引言: 我们必须明白:最小的权限+最少的服务=最大的安全 所以,无论是配置任何服务器,我们都必须把不用的服务关闭.把系统权限设置到最小话,这样才能保证服务器最大的安全.下面是CentOS服务器安全设置 ...
- CentOS7.x机器安装Azure CLI2.0
安装Azure CLI 2.0的前提是:机器中必须有 Python 2.7.x 或 Python 3.x.如果机器中没有其中任何一个Python的版本,请及时安装 1.准备一台CentOS 7.3的机 ...
- Servlet开篇
Servlet开篇 前面我已经说过好多遍了,如何学习好一个东西其实就是2个问题: 1,这个东西是干嘛的?为什么要玩这个东西? 2,怎么样就玩好这个东西了?具体的应该玩这个东西的什么? 其实现在对于我来 ...
- MYSQL导入大量数据碰到的问题及解决方法
在项目中,经常会碰到往数据库中导入大量数据,以便利用sql进行数据分析.在导入数据的过程中会碰到一些需要解决的问题,这里结合导入一个大约4G的txt数据的实践,把碰到的问题以及解决方法展现出来,一方面 ...