Как использовать Основу ViewModel в Asp.net MVC 2

Поскольку я ознакомляюсь с Asp. Сетевой MVC, я использую MVC 2, я заметил использование класса BaseViewData в проекте Kigg, который я не уверен, как реализовать.

Я хочу, чтобы каждый из моих ViewModels имел определенные значения в наличии. Используя iterface приходит на ум, но я задаюсь вопросом, что лучшая практика и как 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 я использую BasePage, который наследовался Системе. Сеть. UI.Page.
Так, в моем проекте 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, как я удостоверяюсь, что каждый из моих ViewModel, который наследовался BaseViewModel, имеет свойство SiteId?

Каковы лучшая практика, образцы или шаблоны, которые я должен использовать?

9
задан Picflight 1 May 2010 в 23:18
поделиться

1 ответ

Подход, который я бы выбрал, - это также использовать базовый контроллер и использовать переопределение 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 = ...
             }
        }
    }
}
13
ответ дан 4 December 2019 в 15:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: