एक्शननाम का उद्देश्य


87

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

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


सबसे आम कारण है जब आपके पास GET और POST दोनों तरीके हैं और हस्ताक्षर समान हैं। @Carlos Muñoz जवाब देखें
रिकएंडएमएसएफटी

जवाबों:


132

यह आपको एक नंबर के साथ अपनी कार्रवाई शुरू करने या किसी भी चरित्र को शामिल करने की अनुमति देता है जो .net एक पहचानकर्ता में अनुमति नहीं देता है। - सबसे सामान्य कारण यह है कि आपके पास एक ही हस्ताक्षर के साथ दो कार्यकलाप हैं (किसी भी पाले हुए नियंत्रक की GET / POST हटाएं कार्रवाई देखें)

उदाहरण के लिए: आप अपने url एक्शन नाम http://example.com/products/create-productबनाम http://example.com/products/createproductया के भीतर डैश की अनुमति दे सकते हैं http://example.com/products/create_product

public class ProductsController {

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

}

46
यह आपको एक्शन नामों का उपयोग करने की भी अनुमति देता है Controllerजो देखने या फ़ाइल की तरह हो सकते हैं ।
चना

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

2
यदि आप अपना नाम बताना चाहते हैं Action View()तो आपको समस्याएँ View()होंगी क्योंकि आपके वर्तमान नियंत्रक के सभी संदर्भ Actionअंतर्निहित आधार विधि के बजाय इसका समाधान करेंगे । तो इसके चारों ओर पाने के लिए आप एक्शन के ActionNameलिए अनुमति देने के लिए विशेषता का उपयोग करेंगे , Viewलेकिन आंतरिक रूप से आप इसे PublicViewया कुछ इसी तरह का कहेंगे ।
निर्मित

2
मुझे लगता है कि आपको return View("CreateProduct")या .NET को इस तरह का दृश्य न मिलने के बारे में नागवार होगा create-product.aspxया create-product.cshtml- कम से कम मेरा कोड इस तरह काम करता है।
अकिलीस

@ग्राम तो आप ऐसा कैसे करते हैं? जाहिर है एक विशेषता के साथ नहीं।
जॉन

61

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

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

public ActionResult SomeAction()
{
    ...
}

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

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

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

1
हम "SomeActionPost" को "SomeAction" में बदलकर भी कर सकते हैं, फिर ActionNn का उपयोग क्या है ??
जिलानी पाशा

यदि आपके पास समान पैरामीटर हैं, तो आप दोनों विधियों को समान नाम दे सकते हैं। इस मामले में [ActionName] कार्रवाई का नाम बदल देता है (विधि नहीं) जैसा कि ASP में पंजीकृत है। नीट एमवीसी मार्ग तालिका के लिए इच्छित।
कार्लोस मुनोज़

38

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

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

2
यह बहुत चालाक है :)
SRQ कोडर

2

इस कोड को आज़माएं:

public class ProductsController
 {

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

}

1

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


0

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

 public ActionResult ActorView()
        { 

            return View(actorsList);
        }


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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.