Skip to content
This repository has been archived by the owner on Dec 14, 2018. It is now read-only.

Big Rock: Pages/PageModel API surface area #6071

Closed
3 tasks done
rynowak opened this issue Apr 4, 2017 · 5 comments
Closed
3 tasks done

Big Rock: Pages/PageModel API surface area #6071

rynowak opened this issue Apr 4, 2017 · 5 comments

Comments

@rynowak
Copy link
Member

rynowak commented Apr 4, 2017

Related issues:

@rynowak
Copy link
Member Author

rynowak commented Apr 17, 2017

Appendix A:

APIs and where they show up - these are the notes that will feed into our decisions about what to put where.

Controller:
    VDD ViewData
    ITempDataDictionary  TempData
    dynamic ViewBag
    
ControllerBase:
    HttpContext HttpContext
    HttpRequest Request
    HttpResponse Response
    RouteData RouteData
    ModelStateDictionary ModelState
    ControllerContext ControllerContext
    IModelMetadataProvider MetadataProvider
    IModelBinderFactory ModelBinderFactory
    IUrlHelper Url
    IObjectModelValidator ObjectValidator
    ClaimsPrincipal User
    TryUpdateModelAsync(...)
    TryValidateModel(...)
    
RazorPageBase:
    ViewContext ViewContext
    dynamic ViewBag
    ClaimsPrincipal User
    
RazorPage:
    HttpContext Context
    
RazorPageOfT:
    TModel Model
    ViewDataDictionary<TModel> ViewData
    IHtmlHelper<TModel> Html (@inject)
    IJsonHelper Json (@inject)
    IViewComponentHelper Component (@inject)
    IUrlHelper Url (@inject)
    IModelExpressionProvider ModelExpressionProvider (@inject)
    
Page:
    ViewContext ViewContext
    HttpContext HttpContext
    HttpRequest Request
    HttpResponse Response
    PageArgumentBinder Binder
    ModelStateDictionary ModelState
    IHtmlHelper<TModel> Html (@inject)
    IJsonHelper Json (@inject)
    IViewComponentHelper Component (@inject)
    IUrlHelper Url (@inject)
    IModelExpressionProvider ModelExpressionProvider (@inject)
    
PageModel:
    PageArgumentBinder Binder
    IUrlHelper Url
    Page Page
    PageContext PageContext
    ViewContext ViewContext
    HttpContext HttpContext
    HttpRequest Request
    HttpResponse Response
    ModelStateDictionary ModelState
    ITempDataDictionary TempData
    ViewDataDictionary ViewData
    BindAsync<TModel>(...)
    TryUpdateModelAsync(...)

@rynowak
Copy link
Member Author

rynowak commented Apr 17, 2017

Appendix B: Flattening Layers

Here are the notes about what's available in each of our high level targets:

Controller:
    ViewDataDictionary ViewData
    ITempDataDictionary  TempData
    dynamic ViewBag
    HttpContext HttpContext
    HttpRequest Request
    HttpResponse Response
    RouteData RouteData
    ModelStateDictionary ModelState
    ControllerContext ControllerContext
    IModelMetadataProvider MetadataProvider
    IModelBinderFactory ModelBinderFactory
    IUrlHelper Url
    IObjectModelValidator ObjectValidator
    ClaimsPrincipal User
    TryUpdateModelAsync(...)
    TryValidateModel(...)
    
RazorPageOfT:
    HttpContext Context
    ViewContext ViewContext
    dynamic ViewBag
    ClaimsPrincipal User
    TModel Model
    ViewDataDictionary<TModel> ViewData
    IHtmlHelper<TModel> Html (@inject)
    IJsonHelper Json (@inject)
    IViewComponentHelper Component (@inject)
    IUrlHelper Url (@inject)
    IModelExpressionProvider ModelExpressionProvider (@inject)
    
Page:
    ViewContext ViewContext
    dynamic ViewBag
    ClaimsPrincipal User
    HttpContext HttpContext
    HttpRequest Request
    HttpResponse Response
    PageArgumentBinder Binder
    ModelStateDictionary ModelState
    IHtmlHelper<TModel> Html (@inject)
    IJsonHelper Json (@inject)
    IViewComponentHelper Component (@inject)
    IUrlHelper Url (@inject)
    IModelExpressionProvider ModelExpressionProvider (@inject)
    
PageModel:
    PageArgumentBinder Binder
    IUrlHelper Url
    Page Page
    PageContext PageContext
    ViewContext ViewContext
    HttpContext HttpContext
    HttpRequest Request
    HttpResponse Response
    ModelStateDictionary ModelState
    ITempDataDictionary TempData
    ViewDataDictionary ViewData
    BindAsync<TModel>(...)
    TryUpdateModelAsync(...)

@rynowak
Copy link
Member Author

rynowak commented Apr 17, 2017

Appendix C: What should change?

Here be's the delta.

Page:
REMOVE PageArgumentBinder
ADD RouteData RouteData
ADD TryUpdateModelAsync(...)
ADD TryValidateModel(...)

PageModel:
REMOVE PageArgumentBinder
REMOVE BindAsync<TModel>(...)
ADD RouteData RouteData
ADD TryUpdateModelAsync(...) (review overloads)
ADD TryValidateModel(...)
ADD dynamic ViewBag
ADD ClaimsPrincipal User

We're also fixin to not to add the following as public properties. We'll hide the functionality behind the convenience methods.

ADD IModelMetadataProvider MetadataProvider
ADD IModelBinderFactory ModelBinderFactory
ADD IObjectModelValidator ObjectValidator

@DamianEdwards
Copy link
Member

Hmm, I kinda don't want to add ViewBag. That thing isn't particularly nice and I wouldn't consider it idiomatic for Pages.

@pranavkm
Copy link
Contributor

@rynowak - do you want this work item open? Looks like the issues here are already covered.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants