2011-10-05 14 views
5

मैं कुछ उदाहरण पढ़ रहा हूँ और मैं [कुछ] तरीकों से पहले साथ कोड दिखाई दे रहा है और मुझे पता है कि क्या कहा जाता है और उसके उपयोग के तरीके चाहते हैं।नेट MVC 3 अर्थ विज्ञान

क्या आप अपना खुद का परिभाषित कर सकते हैं [कुछ] या क्या इन चीजों की एक परिभाषित सूची है?

यहां कुछ कोड उदाहरण हैं जो मैंने पाया है कि इस चीज़ का उपयोग करें लेकिन इसके बारे में कुछ भी समझाएं।

[HandleError] 

public class HomeController : Controller 
{ 

    public ActionResult Index() 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 

कभी कभी वे भी मानकों में यह भी

[HandleError (आदेश = 2)]

की तरह डाल क्या यहाँ पर जा रहा। मुझे लगता है कि यह सुपर महत्वपूर्ण है लेकिन मैंने जो संदर्भ पुस्तकें पढ़ी हैं, उनमें से कोई भी इसे समझाता है कि वे केवल उनका उपयोग करते हैं।

समय से पहले धन्यवाद।

उत्तर

6

HandleError एक विशेषता है।

संक्षिप्त परिचय के लिए गुण

गुण वर्ग कोष्ठक में दिए गए हैं, लगाकर कक्षाएं, structs, खेतों, मानकों, कार्य, और तर्क है, और आप एक कक्षा में गुण से इनहेरिट द्वारा स्वयं अपना निर्धारित कर सकते हैं। एक विशेषता बनाने के विशिष्ट स्वरूप है जैसे:

[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct)] 
public class NameOfYourAttributeAttribute : Attribute { 

} 

उदाहरण में ऊपर:

public class NameOfYourAttributeAttribute : Attribute { 

} 

तुम भी एक विशेषता है कि क्या यह करने के लिए आवेदन कर सकते हैं के दायरे को परिभाषित करता है के साथ अपने गुण परिभाषा उपसर्ग कर सकते हैं , कक्षा के लिए वास्तव में एक वर्ग या संरचना के लिए सजावट करने के अलावा, कक्षा के लिए इतना कुछ नहीं है।

[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple = true)] 
public class Author : System.Attribute 
{ 
    string name; 
    public double version; 

    public Author(string name) 
    { 
     this.name = name; 
     version = 1.0; // Default value 
    } 

    public string GetName() 
    { 
     return name; 
    } 
} 

[Author("H. Ackerman")] 
private class FirstClass 
{ 
    // ... 
} 

// There's some more classes here, see the example link... 

class TestAuthorAttribute 
{ 
    static void Main() 
    { 
     PrintAuthorInfo(typeof(FirstClass)); 
     PrintAuthorInfo(typeof(SecondClass)); 
     PrintAuthorInfo(typeof(ThirdClass)); 
    } 

    private static void PrintAuthorInfo(System.Type t) 
    { 
     System.Console.WriteLine("Author information for {0}", t); 
     System.Attribute[] attrs = System.Attribute.GetCustomAttributes(t); // reflection 

     foreach (System.Attribute attr in attrs) 
     { 
      if (attr is Author) 
      { 
       Author a = (Author)attr; 
       System.Console.WriteLine(" {0}, version {1:f}", a.GetName(), a.version); 
      } 
     } 
    } 
} 
: MSDN, जहां कक्षाएं एक लेखक विशेषता दिया जा सकता है से एक उदाहरण (http://msdn.microsoft.com/en-us/library/z919e8tw%28v=vs.80%29.aspx) पर विचार करें

HandleError के मामले में, विशेष रूप से:

वे उपयोगी जानकारी प्रतिबिंब के माध्यम से देखा जा सकता है प्रदान करते हैं। HandleError के मामले में, इसका अर्थ यह है कि यदि नियंत्रक के भीतर कोई अपवाद फेंक दिया जाता है, तो यह त्रुटि दृश्य को ~/Views/Shared/में प्रस्तुत करेगा।

अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute.aspx देखें।

+0

बहुत बढ़िया उत्तर। इससे बहुत मदद मिली। – Dan

2

इन्हें attributes कहा जाता है, और सी # की एक आम विशेषता है। आप उन्हें अपने आप को घोषणा कर सकते हैं:

class SomeAttr : Attribute 
{ 

} 
2

उन्हें attributes कहा जाता है और वे Attribute से प्राप्त सामान्य कक्षाएं हैं। आप निश्चित रूप से अपने आप को परिभाषित कर सकते हैं।

MVC के बाद से मन में विन्यास से अधिक सम्मेलन के साथ किया जाता है, तो आप विशेषताओं के साथ अपने कार्यों को सजाने कर सकते हैं और ढांचा क्या आप से किसी भी अधिक हस्तक्षेप के बिना उन लोगों के साथ क्या करना है यह पता लगाने की कोशिश करेंगे।

उदाहरण के लिए, यदि आप [HttpGet] के साथ अपने फ़ंक्शन को सजाने के लिए, केवल GET अनुरोधों को इसके माध्यम से रूट किया जाएगा, और कुछ भी (POST की तरह) किसी अन्य फ़ंक्शन की तलाश करेगा, या कुछ और मौजूद नहीं होने पर त्रुटि फेंक देगा।

+0

[HttpGet] और [HttpPost] के स्पष्टीकरण के लिए धन्यवाद। मैंने सोचा कि ऐसा कुछ चल रहा था लेकिन यह देखने के लिए अच्छा लगा। – Dan

+1

उन दो, जो '[प्राधिकरण]' के साथ मिलकर आपको एमवीसी में 9 0% गुणों के माध्यम से प्राप्त करेंगे :) – Blindy

+0

उलझन में हुए हमलों को रोकने में मदद के लिए '[ValidateAntiForgeryToken] 'को न भूलें: http://haacked.com/ संग्रह/2009/04/02/शरीर रचना विज्ञान के- CSRF-attack.aspx – doctorless

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