MVC

 RouteModel(PostResolveRequestCache)

Controler

MvcHandler>ControlerBuilder>ControlerFactory>ControlerActivator>DependencyResolver>ActionInvoker>Action>ActionResult

ActionInvoker执行内容(AuthorizationFilter>ModelBinder>ModelValidation>Action)

Model

ControlerDescriptor(Controler元数据)>ActionDescriptor>ParameterDescriptor(ModelBinder)>ModelBinderProvider>ValueProvider

AcceptVerbsAttribute

NameValueCollectionValueProvider

FormValueProvider

QueryStringValueProvider

DictionaryValueProvider

ModelValidator

ValidationAttribute

 

ModelMetadata(AdditionalValues,ModelMetadataProvider)

各种特性可以设置ModelMetadata

UIHintAttribute(HiddenInput,Html,String,text,Url,MultilineText,Password,Decimal,Boolean,Collection,Object)

HiddenInputAttribute

DataTypeAttribute

DisplayFormatAttribute

EditableAttribute

ReadonlyAttribute

DisplayAttribute

RequiredAttribute

DisplayNameAttribute

TypeConverterAttribute

ListBoxAttribute

ModelMetadataProvider

DataAnnotationsModelMetadataProvider(读取特性初始化ModelMetadata)

IMetadataAware(通过自定义实现该接口的特性可以对ModelMetadata进行自由地定制)

ModelMetadata 创建后回获取所有以上特性值以及实现了IMetadataAware接口的特性值 然后调用IMetadataAware.OnMetadataCreated方法,自己作为参数。

实现该接口的特性:

AdditionalMetadataAttribute

AllowHtmlAttribute

 

HtmlHelper

EditorForModel()

DisplayForModel()

DisplayFor(x=>x.a)

EditFor(x=>x.a)

LabelFor(x=>x.a)

 

 

View

Model中的数据生成什么样的Html可以由模板来决定(默认基于CLR类型匹配对于模板)

自定义模板

模板查询顺序:

  • HTMLHelper作为参数templateName传入的模板名称(如果不为空)。
  • Metadatadata的TemplateHint属性值(如果不为空)。
  • Metadatadata的DataTypeName属性值(如果不为空)。
  • 如果Model对象的真实类型为非空值类型,该类型名作为模板View名;否则底层(Underlying)类型名作为模板View名(比如说,对于int?类型则将Int32作为模板View名)。
  • 如果Model对象的真实类型为非复杂类型,则使用String模板(由于非复杂类型能够实现与String类型之间的转换,所以可以转换成String进行呈现)。
  • 在Model的声明类型为接口情况下,如果该接口继承自IEnuerable则采用Collection模板。
  • 在Model的声明类型为接口情况下,使用Object模板。
  • 如果Model声明类型不是接口类型,按照其类型继承关系向上追溯知道Object类型,逐个将类型名称作为模板View名称。如果声明类型实现了IEnuerable接口,则将最后的Object替换成Collection。

Filter

AuthorizationFilter、ActionFilter、ResultFilter和ExceptionFilter

不同Scope上Filter的执行顺序(Global>Controller>Action)

AuthorizeAttribute

RequireHttpsAttribute

ValidateInputAttribute

OnActionExecuting1>OnActionExecuting2>Action>OnActionExecuted2>OnActionExecuted1

ActionResult

EmptyResult

ContentResult

FileResult(FileContentResult,FilePathResult,FileStreamResult)

JavaScriptResult

JsonResult

HttpStatusCodeResult

RedirectResult

RedirectToRouteResult

View

ViewResult>ViewEngine(FindView)>ViewEngineResult>View(IView)

posted @ 2014-11-12 23:56  fannet  阅读(214)  评论(0)    收藏  举报