2010-03-12 11 views
9

मैं थोड़ा कुछ मिनट पहले आश्चर्यचकित था जब मैं अपने नियंत्रकोंओवरलोडिंग नियंत्रक क्रिया

में से एक में एक कार्य को ओवरलोड करने की कोशिश की मैं

public ActionResult Get() 
{ 
    return PartialView(/*return all things*/); 
} 

था मैं

public ActionResult Get(int id) 
{ 
    return PartialView(/*return 1 thing*/); 
} 

गयी। ... और अचानक न तो काम कर रहे थे

मैंने 'आईडी' को शून्य और छुटकारा दिलकर इस मुद्दे को ठीक किया अन्य दो तरीकों

public ActionResult Get(int? id) 
{ 
    if (id.HasValue) 
     return PartialView(/*return 1 thing*/); 
    else 
     return PartialView(/*return everything*/); 
} 

की और यह काम किया, लेकिन मेरी कोड सिर्फ एक छोटा सा बदसूरत मिल गया है!

कोई टिप्पणी या सुझाव? क्या मुझे अपने नियंत्रकों पर इस दोष के साथ रहना है?

धन्यवाद

डेव

उत्तर

4

आप इस तरह से कार्यों को ओवरलोड नहीं कर सकते हैं के रूप में आप की खोज की है।

एक ही नाम के साथ कई क्रियाएं करने का एकमात्र तरीका यह है कि यदि वे अलग-अलग क्रियाओं का जवाब देते हैं।

मैं तर्क दूंगा कि एक ही विधि है जो दोनों परिस्थितियों को संभालती है एक क्लीनर समाधान है और आपको एक ही स्थान पर अपने तर्क को समाहित करने की अनुमति देता है और एक ही नाम के साथ कई विधियों के बारे में जानने पर भरोसा नहीं करता है जिसका उपयोग विभिन्न उद्देश्यों के लिए किया जाता है । - बेशक यह व्यक्तिपरक है और सिर्फ मेरी राय है।

यदि आप वास्तव में अलग-अलग तरीके चाहते हैं तो आप उन्हें अलग-अलग नाम दे सकते हैं ताकि वे स्पष्ट रूप से उनके विभिन्न उद्देश्यों को इंगित कर सकें। उदा .:

public ActionResult GetAll() 
{ 
    return PartialView(/*return all things*/); 
} 

public ActionResult Get(int id) 
{ 
    return PartialView(/*return 1 thing*/); 
} 
+0

@ मैट, अच्छा बिंदु। यह GetAll() होना चाहिए था। – DaveDev

1

मेरी राय में वहाँ यह वास्तव में भावना आप डेव क्या कह रहे हैं बनाता है। अगर मैं उदाहरण के लिए एक चयन करता हूं जिसमें सबकुछ चुनने का विकल्प होता है, या एक रिकॉर्ड, मैं इसके लिए अलग-अलग तरीकों को नहीं चाहता हूं, बल्कि उदाहरण के लिए एक डेव दिखा रहा है, तो एक अधिभार के साथ एक विधि है।

// MRW

0

मैं एक सही जवाब यहाँ नहीं देखते हैं, तो मैं एक सही जवाब पोस्ट करना चाहते हैं।

हां, आप एक्शननाम विशेषता का उपयोग कर एमवीसी में एक्शन परिणाम ओवरलोड कर सकते हैं।

[ActionName("Get")] 
public ActionResult Get() 
{ 
    return PartialView(/*return all things*/); 
} 

[ActionName("GetById")] 
public ActionResult Get(int? id) 
{ 
    //code 
} 
संबंधित मुद्दे