加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-2 – 如何在Asp.net MVC 2中使用Base ViewModel

发布时间:2020-12-15 20:41:06 所属栏目:asp.Net 来源:网络整理
导读:当我熟悉Asp.Net MVC时,我使用的是MVC 2,我注意到在Kigg项目中使用了BaseViewData类,我不确定如何实现. 我希望我的每个ViewModels都有一些可用的值.使用一个迭代表,但我想知道最好的做法是什么,Kigg如何做? Kigg public abstract class BaseViewData { publ
当我熟悉Asp.Net MVC时,我使用的是MVC 2,我注意到在Kigg项目中使用了BaseViewData类,我不确定如何实现.

我希望我的每个ViewModels都有一些可用的值.使用一个迭代表,但我想知道最好的做法是什么,Kigg如何做?

Kigg

public abstract class BaseViewData 
{ 
  public string SiteTitle { get; set; }
  // ...other properties
}
public class UserListViewData : BaseViewData
{
   public string Title { get; set; }
   // .. other stuff
}

在我的WebForms应用程序中,我使用从System.Web.UI.Page继承的BasePage.
所以,在我的MVC项目中,我有这个:

public abstract class BaseViewModel
{
    public int SiteId { get; set; }
}
public class UserViewModel : BaseViewModel
{
  // Some arbitrary ViewModel
}
public abstract class BaseController : Controller
{
    private IUserRepository _userRepository;

    protected BaseController()
        : this(
            new UserRepository())
    {
    }
 }

参考Kigg方法,我如何确保从BaseViewModel继承的每个ViewModel都具有SiteId属性?

我应该使用什么最佳做法,样本或模式?

解决方法

我将采取的方法是使用基本控制器,并使用OnActionExecuted覆盖用普通数据填充您的模型.然后只需确保您的控制器从您的基本控制器继承,并且模型从基本模型继承.
public class BaseController : Controller
{

    public override void OnActionExecuted( ActionExecutedContext filterContext )
    {
        var result = filterContext.Result as ViewResult;
        if (result != null)
        {
             var baseModel = result.Model as BaseViewModel;
             if (baseModel != null)
             {
                 baseModel.SiteID = ...
             }
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读