type query per net mvc framework first example code asp asp.net-mvc class inheritance

asp.net-mvc - query - hierarchy entity framework



Heredar de ViewPage (3)

Dependiendo de cómo esté haciendo las cosas, es posible que desee mirar

ViewContext.HttpContext.Request.IsAuthenticated

podría ahorrarle algo de tiempo en lugar de extender la clase de la página de visualización.

Si hay otros datos que está buscando, podría escribir un método de extensión a una de las clases que proporciona los datos. Por ejemplo, si LoggedIn se almacenó en la sesión, puede ampliar el contexto para darle un método IsLoggedIn () in.

Editar:

Como extenderá una clase que ya está disponible tanto en la vista básica como en la fuertemente tipada, estará disponible en ambas. La única alternativa es volver a implementar la versión fuertemente tipada como se indicó anteriormente.

¿Es posible heredar tanto de ViewPage como de ViewPage <T> ?? O tengo que implementar ambos. Actualmente esto es lo que tengo para ViewPage. ¿Debo repetirme y hacer lo mismo con ViewPage <T> ??

public class BaseViewPage : ViewPage { public bool LoggedIn { get { if (ViewContext.Controller is BaseController) return ((BaseController)ViewContext.Controller).LoggedOn; else return false; } } }


Crea ambas versiones:

public class BaseViewPage : ViewPage { // put your custom code here } public class BaseViewPage<TModel> : BaseViewPage where TModel : class { // code borrowed from MVC source private ViewDataDictionary<TModel> _viewData; [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public new ViewDataDictionary<TModel> ViewData { get { if (_viewData == null) { SetViewData(new ViewDataDictionary<TModel>()); } return _viewData; } set { SetViewData(value); } } protected override void SetViewData(ViewDataDictionary viewData) { _viewData = new ViewDataDictionary<TModel>(viewData); base.SetViewData(_viewData); } }

entonces

public class MyCustomView : BaseViewPage { } or public class MyCustomView : BaseViewPage<MyCustomViewData> { }


No pondría esto en la vista, en cambio lo tendría como una propiedad en ViewModel (tengo un modelo BaseView). Será más fácil de probar y de garantizar que no se está yendo por la pendiente de poner lógica de negocios en las vistas.