2009-07-23 21 views
12

में नियंत्रक संपत्ति तक पहुंचें मैं नियंत्रक के अंदर एक नई कक्षा को तुरंत चालू करने और नियंत्रक के अंदर एक संपत्ति में इंजेक्शन कक्षा को बचाने के लिए एकता का उपयोग कर रहा हूं। फिर मैं एक एक्शनफिल्टर का उपयोग करना चाहता हूं यह देखने के लिए कि इंजेक्शन क्लास में कुछ गुण हैं जिन्हें मैं इसके कन्स्ट्रक्टर के अंदर मान्य करता हूं। तो इंजेक्शन कक्षा के गुणों को मान्य करने के लिए एक एक्शनफिल्टर का उपयोग करने का कोई तरीका है?एएसपी.नेट एमवीसी - एक एक्शनफिल्टर

अग्रिम धन्यवाद

उत्तर

32

इस तरह कुछ ?:

public class ValidateActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var yourController = filterContext.Controller as YourController; 

     if (yourController == null) 
     { 
      throw new InvalidOperationException("It is not YourController !!!"); 
     } 

     // It is YourController - validate here 
     var yourProperty = yourController.YourProperty; 

     // UPDATED *************************** 
     // or test whether controller has property 

     var property = filterContext.Controller.GetType().GetProperty("YourProperty"); 

     if(property == null) 
     { 
      throw new InvalidOperationException("There is no YourProperty !!!"); 
     } 
    } 
} 
+0

धन्यवाद skaffman। बात यह है कि फ़िल्टर प्रत्येक नियंत्रक में होगा लेकिन उनमें से सभी को संपत्ति परिभाषित नहीं होगी। तो मुझे यह देखने के लिए देखना है कि यह वर्तमान नियंत्रक में मौजूद है या नहीं और उसके बाद मान की जांच करें:) ... –

+3

ऐसा करने का सबसे आसान तरीका एक आईकॉन्टेंस YourProperty इंटरफ़ेस (एक एकल YourProperty संपत्ति के साथ) बनाना होगा और नियंत्रक जो इस संपत्ति का पर्दाफाश करते हैं, इंटरफ़ेस को लागू करते हैं, फिर फ़िल्टर नियंत्रक पर इस इंटरफ़ेस के अस्तित्व की जांच कर सकता है। अन्यथा, संपत्ति की जांच के लिए प्रतिबिंब का उपयोग करें, लेकिन यह शायद अधिक है। – Levi

+0

यही वह था जो मैंने किया। धन्यवाद लेवी :) –

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