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和服务器硬盘上的文件之间有着直接关系.服务器的任务是 ...
随机推荐
- eclipse中git解决冲突
摘录自http://blog.csdn.net/rosten/article/details/17068285 1. 工程->Team->同步 2.从远程pull至本地,就会出现如下内容 ...
- 以守护进程的方式部署flask
1.文件目录 创建一个简单的flask 项目... application = Flask(__name__) application.debug = True 2.安装wsgi pip instal ...
- MySQL 查询最近几天的记录 最近7天的记录 本周内的记录
本周内:select * from wap_content where week(created_at) = week(now) 查询一天:select * from table where to_d ...
- Linuxc - 多c文件程序编译执行
多文件使用,一起编译 定义max.h int max(int a,int b); 定义max.c #include "max.h" int max(int a,int b) { i ...
- intellij springmvc的配置文件报错
报错: Checks references injected by IntelliLang plugin. Cannot resolve bean 解决: File--Settings[或直接CTR ...
- Storm集群安装与部署
准备 1.三台虚拟机 192.168.1.128 Nimbus 192.168.1.131 Supervisor 192.168.1.132 Supervisor 2.JDK1.8 3.Zookeep ...
- 二叉查找树C++实现
二分查找树特点: (1) 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值: (2) 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值: (3) 任意节点的左.右子树 ...
- awk解决实际问题例子
awk很有用,就不说了,下面记录几个我遇到的例子,汇总 1 获得linux环境变量(ENVIRON) awk 'BEGIN{print ENVIRON["PATH"];}' /et ...
- [JAVA] - 从 m 个元素中随机选中 n 个
之前业务中曾经遇到过从m个元素中选取 n 个的需求,当时只是跑循环根据长度进行随机选取,然后放入 Set 中去重,一直到收集到足够的个数. 这样做的缺点很明显,当剩下的元素个数越少的时候,选取的元素越 ...
- awk 里的substr()
awk 里的substr函数用法举例: 要截取要截取的内容1: F115!16201!1174113017250745 10.86.96.41 211.140.16.1 200703180718F12 ...