2012-12-05 19 views
8

नियंत्रक:ControllerDescriptor FindAction रिटर्न अशक्त

[HttpDelete] 
public ActionResult Delete(int id) 
{ 
} 

विधि:

ControllerBase controllerToLinkTo = string.IsNullOrEmpty(controllerName) 
             ? htmlHelper.ViewContext.Controller 
             : GetControllerByName(htmlHelper, controllerName); 

var controllerContext = new ControllerContext(htmlHelper.ViewContext.RequestContext, controllerToLinkTo); 
var controllerDescriptor = new ReflectedControllerDescriptor(controllerToLinkTo.GetType()); 
ActionDescriptor actionDescriptor = controllerDescriptor.FindAction(controllerContext, actionName); 

ActionDescriptor रिक्त है एक क्रिया होती है जब [हटाएँ] विशेषता। क्या नियंत्रक संदर्भ से कार्य नाम प्राप्त करने का कोई तरीका है?

+1

एचटीपीपोस्ट (कम से कम यह मेरे लिए करता है) के साथ एक ही समस्या होगी –

+0

@AndrewBacker वास्तव में, मुझे एचटीपीपोस्ट के साथ मेरी परियोजना पर एक ही समस्या थी, और जुआन कार्लोस ने जवाब दिया! – Shautieh

उत्तर

12

मुझे .NET 4.5 में एक ही समस्या थी, क्योंकि FindAction विधि केवल गुण प्राप्त करती है। मैंने GetCanonicalActions विधि के साथ दूसरी खोज जोड़ने में समस्या का समाधान किया।

ControllerBase controllerToLinkTo = string.IsNullOrEmpty(controllerName) 
                 ? htmlHelper.ViewContext.Controller 
                 : GetControllerByName(htmlHelper, controllerName); 

var controllerContext = new ControllerContext(htmlHelper.ViewContext.RequestContext, controllerToLinkTo); 
var controllerDescriptor = new ReflectedControllerDescriptor(controllerToLinkTo.GetType()); 
var actionDescriptor = controllerDescriptor.FindAction(controllerContext, actionName); 

//add the following lines 
if (actionDescriptor == null) 
{ 
    actionDescriptor = controllerDescriptor.GetCanonicalActions().FirstOrDefault(a => a.ActionName == actionName); 
} 

नोट: मैं LINQ विधि FirstOrDefault उपयोग करते हैं, तो rember using System.Linq जोड़ने;

+1

मैंने एचटीपीपोस्ट के साथ एक ही समस्या को संभालने के लिए क्या किया था, GetCanonicalActions का उपयोग करना था, लेकिन अधिक प्रतिबंधक तरीके से (मेरी समस्या के लिए अधिक अनुकूल), इस तरह: GetCanonicalActions()। SingleOrDefault (e => e.ActionName == actionName && e। GetCustomAttributes (typeof (HttpPostAttribute), झूठा)। तरंगदैर्ध्य> 0); – Shautieh

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