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.