2009-02-08 10 views
19

चूंकि मैंने बीटा के साथ रहने के दौरान आरसी जाने का फैसला किया है, इसलिए मुझे यह जानने का कोई तरीका नहीं है कि दृढ़ता से टाइप किया गया RedirectToAction जोड़ा गया है। क्या किसी ने कोशिश की है और क्या आरसी में RedirectToAction (और शायद ActionLink) जोरदार टाइप किया गया है?क्या .NET MVC का दृढ़ता से टाइप किया गया RedirectToAction है?

+2

आप @Darrell Mozingo के जवाब देने के लिए स्वीकार किए जाते हैं जवाब बदलना चाहिए कर सकते हैं; क्योंकि RedirectToAction वास्तव में फ़्यूचर्स असेंबली में है। –

उत्तर

17

नहीं, ऐसा नहीं है।

protected RedirectToRouteResult RedirectToAction<T>(Expression<Action<T>> action, RouteValueDictionary values) where T : Controller 
{ 
    var body = action.Body as MethodCallExpression; 

    if (body == null) 
    { 
     throw new ArgumentException("Expression must be a method call."); 
    } 

    if (body.Object != action.Parameters[0]) 
    { 
     throw new ArgumentException("Method call must target lambda argument."); 
    } 

    string actionName = body.Method.Name; 

    var attributes = body.Method.GetCustomAttributes(typeof(ActionNameAttribute), false); 
    if (attributes.Length > 0) 
    { 
     var actionNameAttr = (ActionNameAttribute)attributes[0]; 
     actionName = actionNameAttr.Name; 
    } 

    string controllerName = typeof(T).Name; 

    if (controllerName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase)) 
    { 
     controllerName = controllerName.Remove(controllerName.Length - 10, 10); 
    } 

    RouteValueDictionary defaults = LinkBuilder.BuildParameterValuesFromExpression(body) ?? new RouteValueDictionary(); 

    values = values ?? new RouteValueDictionary(); 
    values.Add("controller", controllerName); 
    values.Add("action", actionName); 

    if (defaults != null) 
    { 
     foreach (var pair in defaults.Where(p => p.Value != null)) 
     { 
      values.Add(pair.Key, pair.Value); 
     } 
    } 

    return new RedirectToRouteResult(values); 
} 

यह काम करना चाहिए।

+1

क्या यह फ्यूचर्स डीएल में मौजूद है? मुझे यह नहीं मिल रहा है, अगर ऐसा होता है? मुझे आश्चर्य है कि यह क्यों याद किया गया था ?? –

+0

चाड .. यह नियंत्रक वर्ग के लिए एक विस्तार विधि कैसे बन सकता है? –

+0

मैं इसे मूल नियंत्रक वर्ग पर डालने और अपने नियंत्रकों को उस से प्राप्त करने की अनुशंसा करता हूं। –

24

यह आपके नियंत्रक पर विस्तार विधि के रूप में MVC Contrib में भी शामिल है, साथ ही मॉडलस्टेट हैंडलिंग, परीक्षण इत्यादि के लिए कई अन्य दृढ़ता से टाइप की गई उपहारों के साथ-साथ यह जो भी ऑफर करता है, उसके लिए अतिरिक्त निर्भरता को लेना उचित है।

+1

यह सही उत्तर है। –

0

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

1

आप का उपयोग return RedirectToAction(nameof(Index));

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