可以同时从ViewPage和ViewPage继承吗?或者我必须同时实现这两个。目前,这就是我为ViewPage准备的。我是否需要重复自己,并对ViewPage执行相同的操作??
public class BaseViewPage : ViewPage
{
public bool LoggedIn
{
get
{
if (ViewContext.Controller is BaseController)
return ((BaseController)ViewContext.Controller).LoggedOn;
else
return false;
}
}
}发布于 2008-12-16 06:21:49
创建两个版本:
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);
}
}然后
public class MyCustomView : BaseViewPage
{
}
or
public class MyCustomView : BaseViewPage<MyCustomViewData>
{
}发布于 2008-12-16 09:25:58
根据你做事情的方式,你可能想要看一下
ViewContext.HttpContext.Request.IsAuthenticated这可能会为您节省一些时间,而不是扩展ViewPage类。
如果您想要一些其他数据,您可以向提供数据的类之一编写一个扩展方法。例如,如果LoggedIn存储在会话中,您可以扩展上下文以提供一个IsLoggedIn() in方法。
编辑:
当您扩展一个在基视图和强类型视图中都可用的类时,它将在两者中都可用。唯一的另一种方法是如上所述地重新实现强类型版本。
发布于 2008-12-22 23:41:55
我不会把它放在视图中,相反,我会把它作为ViewModel的一个属性(拥有一个BaseViewModel)。它将更容易测试,并确保您不会在将业务逻辑放入视图的过程中走下坡路。
https://stackoverflow.com/questions/370500
复制相似问题