2010-05-01 6 views
9

जैसा कि मैं स्वयं को एएसपी.नेट एमवीसी के साथ परिचित करता हूं, मैं एमवीसी 2 का उपयोग कर रहा हूं, मैंने किग परियोजना में बेसव्यूडेटा क्लास का उपयोग देखा है, जो मुझे यकीन है कि कैसे लागू।Asp.net एमवीसी 2 में बेस व्यू मॉडेल का उपयोग कैसे करें

मैं अपने प्रत्येक व्यू मॉडल्स को कुछ निश्चित मान उपलब्ध करना चाहता हूं। एक इयरफेस का उपयोग करना दिमाग में आता है लेकिन मैं सोच रहा हूं कि सबसे अच्छा अभ्यास क्या है और किग इसे कैसे करता है?

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 कि System.Web.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 कार्यप्रणाली संदर्भित, कैसे मुझे यकीन है कि कि BaseViewModel से विरासत मेरी ViewModel से प्रत्येक SiteId संपत्ति है कर सकता हूँ?

सबसे अच्छा अभ्यास, नमूने या पैटर्न क्या उपयोग करना चाहिए?

उत्तर

13

मैं जो दृष्टिकोण लेता हूं वह आधार नियंत्रक का भी उपयोग करना है और सामान्य डेटा के साथ अपने मॉडल को पॉप्युलेट करने के लिए ऑनएक्शन एक्स्क्टेड ओवरराइड का उपयोग करना है। फिर बस सुनिश्चित करें कि आपके नियंत्रक आपके बेस नियंत्रक से प्राप्त होते हैं और आपके मॉडल बेस मॉडल से प्राप्त होते हैं।

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

आप इस तरह इसका इस्तेमाल करने के लिए फिल्टर संदर्भ कास्ट करने के लिए होगा: '((ViewResult) filterContext.Result) .ViewData.Model' – ajbeaven

+0

मेरे कोड को देखते हुए, मैं वास्तव में एक स्थानीय चर में परिणाम को बचाने के 'as' का उपयोग करके ViewResult को कास्टिंग, फिर शून्य के लिए जांचें। – tvanfosson

संबंधित मुद्दे