2009-06-08 11 views
7

मैं दृढ़ता से टाइप किए गए विचारों का उपयोग करता हूं जहां सभी व्यूमोडल्स क्लास बेसव्यूमोडेल का उत्तराधिकारी हैं।टाइप किए गए दृश्य का उपयोग करते समय ActionFilterAttribute में मॉडल डेटा कैसे सेट करें

एक एक्शनफिल्टर में जो सभी नियंत्रकों को सजाने के लिए मैं मॉडल का उपयोग करना चाहता हूं।

अभी मैं केवल इसे इस तरह उपयोग कर सकते हैं:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     ViewModelBase model = (ViewModelBase)filterContext.ActionParameters["viewModel"]; 
     base.OnActionExecuting(filterContext); 
    } 

समस्या है, मैं कुंजी "ViewModel" पता करने के लिए है। कुंजी, ViewModel है क्योंकि मेरे नियंत्रक में मैं प्रयोग किया है:

वापसी देखें ("MyView", ViewModel)

वहाँ मॉडल acces के लिए एक सुरक्षित तरीका है?

उत्तर

14

OnActionExecuting आपके एक्शन को निष्पादित करने से ठीक पहले काम करता है - इस प्रकार मॉडल को शून्य पर सेट किया गया है। आप OnActionExecuted में अपने ViewData (या ViewData.Model) पहुंच सकता है:

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    var model = filterContext.Controller.ViewData.Model as YourModel; 

    ... 
} 

आशा इस मदद करता है

+0

यह समझ में आता है। मेरे फ़िल्टर का हिस्सा मार्ग से मूल्यों तक पहुंच सकता है और कार्रवाई निष्पादन से पहले ज्ञात होने की आवश्यकता है। मेरे पास अभी भी OnActionExecuting में यह हिस्सा है। शेष अब OnActionExecuted में है। –

4

आप कर सकते हैं उपयोगकर्ता OnActionExecuting में भी इस:

BaseModel model = filterContext.ActionParameters.SingleOrDefault(m => m.Value is BaseModel).Value as BaseModel; 

आशा इस मदद करता है

1

यह एक पुराना सवाल है लेकिन अब मैं ऑनएक्शनएक्सिंग के दौरान मॉडल तक पहुंचने में सक्षम हूं:

var model = filterContext.ActionParameters["model"] as CustomerModel; 
संबंधित मुद्दे