asp.net mvc - पोस्ट करें और उसी विधि हस्ताक्षर के साथ प्राप्त करें




asp.net-mvc post (5)

आपकी क्रिया विधियां एक ही काम नहीं कर सकती हैं, अन्यथा दो क्रिया विधियों को लिखने की आवश्यकता नहीं होगी। तो यदि अर्थशास्त्र अलग हैं, तो कार्रवाई विधियों के लिए अलग-अलग नामों का उपयोग क्यों न करें?

उदाहरण के लिए, यदि आपके पास "हटाएं" एक्शन विधि थी और केवल पुष्टि के लिए पूछता है, तो आप GET विधि "ConfirmDelete" और POST विधि को "हटाएं" कह सकते हैं।

सुनिश्चित नहीं है कि यह आपके परिदृश्य से मेल खाता है, लेकिन जब मुझे एक ही समस्या थी तो यह हमेशा मेरे लिए किया जाता था।

मेरे नियंत्रक में मेरे पास दो मित्र हैं जिन्हें "मित्र" कहा जाता है। जो निष्पादित करता है वह इस पर निर्भर करता है कि यह "पोस्ट" बनाम "पोस्ट" है या नहीं।

तो मेरे कोड स्निपेट इस तरह कुछ दिखते हैं:

// Get:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Friends()
{
    // do some stuff
    return View();
}

// Post:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Friends()
{
    // do some stuff
    return View();
}

हालांकि, यह संकलित नहीं है क्योंकि मेरे पास एक ही हस्ताक्षर (दोस्तों) के साथ दो विधियां हैं। मैं इसे बनाने के बारे में कैसे जा सकता हूं? क्या मुझे केवल एक ही क्रिया बनाने की ज़रूरत है, लेकिन इसके अंदर "प्राप्त करें" और "पोस्ट" के बीच अंतर करें? अगर ऐसा है, तो मैं वह कैसे करू?


उपयोग करने का प्रयास करें:

[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)]
public ActionResult Friends()
{
    // do some stuff
    return View();
}

दूसरी विधि को "Friends_Post" जैसे किसी अन्य चीज़ का नाम बदलें और फिर आप दूसरे एक्शन में [ActionName("Friends")] विशेषता जोड़ सकते हैं। इसलिए अनुरोध प्रकार के रूप में POST के साथ मित्र कार्रवाई के अनुरोध, उस क्रिया द्वारा संभाले जाएंगे।

// Get:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Friends()
{
    // do some stuff
    return View();
}

// Post:
[ActionName("Friends")]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Friends_Post()
{
    // do some stuff
    return View();
}

पद में प्राप्त करने के लिए पैरा विधि पोस्ट पैराम में जोड़ें। शायद इस तरह:

// Post:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Friends(string friendName, string otherField)
{
    // do some stuff
    return View();
}

.. या यदि आपके पास जटिल प्रकार है, तो इस तरह:

// Post:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Friends(Friend friend)
{
    // do some stuff
    return View();
}

संपादित करें: उपरोक्त की तरह पोस्ट किए गए आइटम प्राप्त करने के लिए अधिक टाइप किए गए दृष्टिकोण का उपयोग करना बेहतर होगा।


यदि आप वास्तव में केवल एक दिनचर्या दोनों क्रियाओं को संभालने के लिए चाहते हैं, तो इसे आजमाएं:

[AcceptVerbs("Get", "Post")]
public ActionResult ActionName(string param1, ...)
{
//Fun stuff goes here.
}

एक संभावित चेतावनी: मैं एमवीसी रिलीज का उपयोग कर रहा हूं 2. सुनिश्चित नहीं है कि यह एमवीसी 1 में समर्थित था। AcceptVerbs के लिए Intellisense दस्तावेज़ आपको बताना चाहिए।





asp-net-mvc-1