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和服务器硬盘上的文件之间有着直接关系.服务器的任务是 ...
随机推荐
- salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)
Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming ...
- linux 3.10的kdump配置的小坑
之前在2.6系列linux内核中,当发现某个模块不要在保留内核中加载的时候,可以通过blacklist参数将其在/etc/kdump.conf中屏蔽 blacklist <list of ker ...
- TF-卷积函数 tf.nn.conv2d 介绍
转自 http://www.cnblogs.com/welhzh/p/6607581.html 下面是这位博主自己的翻译加上测试心得 tf.nn.conv2d是TensorFlow里面实现卷积的函数, ...
- JSTL与EL的区别
JSTL JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的.JSTL只能运行在支持J ...
- nginx添加编译lua模块
一 .安装LuaJit 1.下载LuaJit # wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz 2.编译安装 # tar xzvf LuaJI ...
- SQL Server中的变更捕获技术--简单部署
------准备------ CREATE DATABASE db_test_cdc ,) ,name )); INSERT INTO t1(name)VALUES('test') ------开始- ...
- CentOS7修改主机名(hostname)
Linux中的hostname在大多数应用中至为重要,例如有些应用强制使用主机名称而不能使用IP地址,如果默认主机名称都为localhost.localdomain 的话那一定会出现问题,而且看起来也 ...
- 【sed & awk 第二版笔记】以州和人名排列_P38
[root@nhserver1 02]# cat listJohn Daggett, 341 King Road, Plymouth MAAlice Ford, 22 East Broadday, R ...
- Ajax发送数据
- Hyperledger Fabric Chaincode for Operators——实操智能合约
什么是Chaincode(智能合约)? chaincode是一个程序,它是使用Go语言编写的,最终在Java等其他编程语言中实现了指定的接口.chaincode运行在一个被背书peer进程独立出来的安 ...