मेरे पास एक ही नाम के साथ दो नियंत्रक क्रियाएं हैं लेकिन विभिन्न विधि हस्ताक्षरों के साथ। वे इस तरह दिखेगा:मैं दो नियंत्रक कार्यों के बीच अस्पष्ट मैच अपवाद से कैसे बच सकता हूं?
//
// GET: /Stationery/5?asHtml=true
[AcceptVerbs(HttpVerbs.Get)]
public ContentResult Show(int id, bool asHtml)
{
if (!asHtml)
RedirectToAction("Show", id);
var result = Stationery.Load(id);
return Content(result.GetHtml());
}
//
// GET: /Stationery/5
[AcceptVerbs(HttpVerbs.Get)]
public XmlResult Show(int id)
{
var result = Stationery.Load(id);
return new XmlResult(result);
}
मेरे इकाई परीक्षण एक या अन्य नियंत्रक कार्रवाई बुला के साथ कोई समस्या नहीं है, लेकिन मेरे परीक्षण html पृष्ठ एक System.Reflection.AmbiguousMatchException फेंकता है।
<a href="/Stationery/1?asHtml=true">Show the stationery Html</a>
<a href="/Stationery/1">Show the stationery</a>
इस काम को करने के लिए क्या बदलने की आवश्यकता है?
मुझे मूल रूप से ऐसा कुछ था, लेकिन मैं अपने सभी यूनिट परीक्षणों को एक्शनरसेट को उपयुक्त प्रकार में डालने के लिए नहीं बदलना चाहता था (साथ ही साथ हस्ताक्षर में शून्य जोड़ना)। हालांकि, यह शायद सबसे अच्छा तरीका है क्योंकि मुझे अन्य विकल्पों की परवाह नहीं है। उत्तर +1 –
ध्यान दें कि आप एक क्रिया अधिभारित नहीं कर सकते हैं। http://stackoverflow.com/questions/436866/can-you-overload-controller-methods-in-asp-net-mvc – Samuel