2010-05-01 16 views
9

Kendimi Asp.Net MVC ile tanıştırdığımdan, MVC 2 kullanıyorum, Kigg projesinde bir BaseViewData sınıfının kullanıldığını fark ettim; uygulamak.Asp.net MVC 2'de Base ViewModel nasıl kullanılır?

ViewModels'ımın her birinin belirli değerlerin kullanılabilir olmasını istiyorum. Bir iterface kullanmak akla geliyor ama en iyi uygulamanın ne olduğunu merak ediyorum ve Kigg bunu nasıl yapıyor? Benim WebForms uygulamasında Kigg

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

Ben System.Web.UI.Page devralan bir BasePage kullanın. Ben BaseViewModel devralır benim ViewModel her siteid özelliği olduğundan emin olun, nasıl

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 metodolojisini başvurulması:
Yani, benim MVC projesinde, bu var?

Kullanmam gereken en iyi uygulama, örnek veya desen hangisidir?

cevap

13

Yapacağım yaklaşım, bir temel denetleyici kullanmak ve modelinizi genel verilerle doldurmak için OnActionExecuted geçersiz kılma kullanmaktır. Sonra kontrol cihazlarınızın baz kontrol cihazınızdan miras aldığından ve modellerin baz modelden miras aldığından emin olun.

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 = ... 
      } 
     } 
    } 
} 
+0

Böyle kullanmak için filtre bağlamı döküm gerekecek: '((ViewResult) filterContext.Result) .ViewData.Model' – ajbeaven

+0

kodumu baktığımızda, aslında yerel bir değişkene sonucu kaydetmek 'yi kullanarak ViewResult'a dökülüyor, ardından boş değerlere bakın. – tvanfosson