2011-06-30 10 views
67

"एक्शननाम" विशेषता का उपयोग करके एक्शन विधि के लिए उपनाम सेट करने का क्या फायदा है? उपयोगकर्ता को कुछ अन्य नामों के साथ एक एक्शन विधि कॉल करने का विकल्प प्रदान करने में, मुझे वास्तव में इसका अधिक लाभ नहीं दिखाई देता है। उपनाम निर्दिष्ट करने के बाद, उपयोगकर्ता केवल उपनाम का उपयोग करके कार्रवाई विधि को कॉल करने में सक्षम है। लेकिन यदि यह आवश्यक है तो उपयोगकर्ता कार्रवाई विधि का नाम क्यों बदलता है बल्कि उसके लिए उपनाम निर्दिष्ट करता है?एक्शननाम का उद्देश्य

मैं वास्तव में सराहना करता हूं अगर कोई मुझे एक परिदृश्य में "एक्शननाम" के उपयोग का एक उदाहरण प्रदान कर सकता है जहां यह बहुत लाभ प्रदान कर सकता है या इसका उपयोग करना सबसे अच्छा है।

+0

सबसे आम कारण यह है कि जब आपके पास GET और POST विधियां होती हैं और हस्ताक्षर समान होता है। @ कार्लोस मुनोज उत्तर – RickAndMSFT

उत्तर

109

यह आपको किसी संख्या के साथ अपनी कार्रवाई शुरू करने या किसी भी चरित्र को शामिल करने की अनुमति देता है .net पहचानकर्ता में अनुमति नहीं देता है। आप अपने यूआरएल कार्रवाई का नाम http://example.com/products/create-product भीतर डैश अनुमति दे सकता है बनाम http://example.com/products/createproduct या: - सबसे आम कारण यह आप एक ही हस्ताक्षर (देखें प्राप्त/पोस्ट को हटाना किसी भी scaffolded नियंत्रक के कार्यों)

उदाहरण के लिए के साथ दो क्रिया है की अनुमति देता है http://example.com/products/create_product

public class ProductsController { 

    [ActionName("create-product")] 
    public ActionResult CreateProduct() { 
     return View(); 
    } 

} 
+40

यह आपको एक्शन नामों का उपयोग करने देता है जो 'नियंत्रक' पर विधियां हो सकती हैं, जैसे व्यू या फ़ाइल। – gram

+0

@ ग्राम, क्या हम उपनाम निर्दिष्ट किए बिना नियंत्रक पर सामान्य विधि नहीं कह सकते हैं? मुझे लगता है हम कर सकते हैं। –

+2

यदि आप अपने 'एक्शन' 'व्यू()' को नाम देना चाहते हैं तो आपको समस्याएं होंगी क्योंकि आपके वर्तमान नियंत्रक में 'व्यू()' के सभी संदर्भ अंतर्निहित आधार विधि के बजाय 'एक्शन' को हल करेंगे। तो इसके आस-पास पहुंचने के लिए आप 'एक्शननाम' विशेषता का उपयोग 'व्यू' एक्शन के लिए अनुमति देने के लिए करेंगे, लेकिन आंतरिक रूप से आप इसे 'पब्लिक व्यू' या कुछ इसी तरह कहते हैं। – Buildstarted

51

यह भी उपयोगी है यदि आपके पास एक ही हस्ताक्षर वाले दो क्रियाएं हैं जो समान यूआरएल होनी चाहिए।

एक साधारण उदाहरण:

public ActionResult SomeAction() 
{ 
    ... 
} 

[ActionName("SomeAction")] 
[HttpPost] 
public ActionResult SomeActionPost() 
{ 
    ... 
} 
+0

धन्यवाद @ कार्लोस मुनोज। ऐसा लगता है कि इसका एक अच्छा उपयोग है। –

+0

समझ में आता है, लेकिन आप किस परिदृश्य में पैरामीटर के बिना HttpPost का उपयोग करते हैं? मुझे पता है कि जेएसओएन लौटने और जीईटी के साथ सुरक्षा मुद्दों से बचने जैसे संभावित कारण हैं। मैं बस सोच रहा हूँ कि तुम्हारा क्या है। – regularmike

+1

पैरामीटर सूची यहां महत्वपूर्ण हिस्सा नहीं है। एक बेहतर उदाहरण हो सकता है, मुद्दा यह है कि यदि आपको आवश्यकता हो तो आप इसे कर सकते हैं। –

28

मैं इसका उपयोग इतना है कि वे आसानी से एक्सेल में सीधे उनके csv फ़ाइल खोल सकते हैं उपयोगकर्ता एक रिपोर्ट डाउनलोड करता है जब।

[ActionName("GetCSV.csv")] 
public ActionResult GetCSV(){ 
    string csv = CreateCSV(); 
    return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" }; 
} 
+0

यह बहुत चालाक है :) –

5

ActionName विशेषताओं बाहर की दुनिया के अलग-अलग नाम के साथ नेट कार्रवाई तरीकों का पर्दाफाश किया जाता है। नीचे परिस्थितियों में, आप कर सकते हैं ActionName के उपयोग का श्रेय:

  1. एसईओ (खोज इंजन अनुकूलन) आप से नेट कार्रवाई विधि नाम आपके URL में अधिक सार्थक कार्रवाई का नाम का खुलासा करना चाहते हैं।

  2. संबंधित मुद्दों को ओवरलोड करने से रोकने के लिए। मान लीजिए कि आपके पास एक डिलीट एक्शन विधि नाम है, जिसका जीईटी और पोस्ट एक्शन विधियां समान पैरामीटर स्वीकार करती हैं। इस मामले में आप समय त्रुटि संकलित करेंगे। इस समस्या को हल करने के लिए आप अपनी .NET विधि का नाम बदल सकते हैं और एक्शननाम विशेषता के साथ आप अभी भी उसी नाम को उजागर कर सकते हैं।

अधिक विस्तृत विवरण के लिए देखें ActionName attribute in ASP.NET MVC

-1

यह है जब आप विधि से अधिक भार लागू करने की आवश्यकता भी उपयोगी है।

public ActionResult ActorView() 
     { 

      return View(actorsList); 
     } 


     [ActionName("ActorViewOverload")] 
     public ActionResult ActorView(int id) 
     {    
      return RedirectToAction("ActorView","Home"); 
     } 
` 

यहां एक अभिनेता दृश्य कोई पैरामीटर स्वीकार नहीं करता है और दूसरा int स्वीकार करता है। अभिनेता सूची और दूसरे को देखने के लिए उपयोग की जाने वाली पहली विधि आईडी के साथ आईडी को आईडी के रूप में हटाने के बाद एक ही अभिनेता सूची दिखाने के लिए उपयोग की जाती है। आप एक्शन नाम का उपयोग 'ActorViewOverload' whereever के रूप में कर सकते हैं जिसकी आपको विधि अधिभार की आवश्यकता है।

1

इस कोड का प्रयास करें:

public class ProductsController 
{ 

    [ActionName("create-product")] 
    public ActionResult CreateProduct() 
    { 
     return View("CreateProduct"); 
    } 

} 
0

इस वर्ग के एक विशेषता है जो एक कार्रवाई के नाम के लिए प्रयोग किया जाता है प्रतिनिधित्व करता है।यह डेवलपर्स को विधि नाम की तुलना में एक अलग एक्शन नाम का उपयोग करने की अनुमति देता है।

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