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笔记的更多相关文章

  1. 《Pro ASP.NET MVC 4》异常整理

    最近在和同学一起研究毕业设计,准备模仿<Pro ASP.NET MVC 4>里面的SportsStore设计模式和测试驱动开发. 由于和书中VS版本不同,发现不少问题,在此总结. 用户代码 ...

  2. ASP.NET MVC学习笔记-----Filter2

    ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...

  3. ASP.NET MVC学习笔记-----Filter

    ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...

  4. ASP.NET MVC学习笔记-----Filter(2)

    接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...

  5. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  6. 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 ...

  7. 【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 到此为止,我们已经学了为 ...

  8. Pro ASP.NET MVC 5 Framework.学习笔记.6.3.MVC的必备工具

    每个MVC程序员的军火库中,都有这三个工具:一个依赖注入(DI)容器,一个单元测试框架,一个模拟工具. 1.准备一个示例项目 创建一个ASP.NET MVC Web Application的Empty ...

  9. 【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和服务器硬盘上的文件之间有着直接关系.服务器的任务是 ...

随机推荐

  1. 如何激活Microsoft Office 2010?

    Microsoft Office安装完成之后通常都是未激活的,怎样激活这个软件呢? 百度经验:jingyan.baidu.com 工具/原料 Office 2010 Toolkit软件 百度经验:ji ...

  2. MySQL 多版本并发控制(MVCC)

    可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁的操作,因此开销会很低.主要实现的是非阻塞的读操作,写操作也只是锁定必要的行.MVCC的实现是通过保存数据在某个时间点的快照来实现的,也 ...

  3. Java this 关键字的用法

    this 关键字的用法 this 在类中就是代表当前对象,可以通过 this 关键字完成当前 对象的成员属性.成员方法和构造方法的调用. 那么何时用 this? 当在定义类中的方法时,如果需要调用该类 ...

  4. git 签出(恢复)指定文件

    在项目开发中,偶尔会因为误删文件或其他原因需要从git仓库中恢复某些文件.此篇文章将介绍如何通过git从历史提交记录.分支记录恢复指定文件. 1. git checkout 说明:使用git chec ...

  5. python_py2和py3读写文本区别

    python2和python3的区别? python 2  str             对应      python3 bytes python 2 uincode            对应   ...

  6. 摘-BMC自动化解决方案产品概览

    以下内容摘自BMC解决方案白皮书 BMC 解决方案助力您的企业快速享受自动化带来的快速效益,并随时间推移实现这些优势的最大化. BMC 自动化技术可帮助您优化敏捷性,同时保持必要的治理和合规性控制.无 ...

  7. WebSphere--部署Servlet

    在WebSphere应用服务器上部署 Servlet需要四个步骤:编译 Servlet 或 Web 应用程序.将类文件放到 WebSphere应用服务器上.将相关的 HTML.JSP 和 SHTML ...

  8. 溢出问题:overflow后最后一排文字显示不全

    溢出字体会显示在padding区域(http://www.divcss5.com/css-hack/c680.shtml) section#xinwen li a h3{ border-bottom: ...

  9. PHP中文网上的分页代码

    page.php <html> <head> <meta http-equiv="CONTENT-TYPE" content="text/h ...

  10. MySQL之SELECT用法

    主要是为了搞定一个select语句,因为语法比较奇怪,没看懂,百度了一些结果 select的东西相当于一个临时表,as就给这临时表取个名字. SELECT语句的完整语法SELECT语句的完整语法为: ...