2012-03-17 12 views
10

मैं फिर से लिखने और अनुकूलित @Html.ActionLink करने के लिए, इस विधि का भार के में से एक में मापदंड हैं की कोशिश:ASP.NET MVC3 के साथ कस्टम HtmlHelper में क्षेत्र का नाम और नियंत्रक का नाम खोजें

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, 
             string linkText, string actionName); 

और मैं इसके बाद के संस्करण की तरह कुछ चाहता हूँ

string controller = ViewContext.RouteData.Values["Controller"]; 
string area = ViewContext.RouteData.DataTokens["Area"]; 

लेकिन त्रुटि वृद्धि के रूप में:

और भी बिना यह मानकों से गुजरती AreaName और ControllerName खोजने की जरूरत है, मैं निम्नलिखित का उपयोग करने के बारे में सोच 10

और स्पष्ट रूप से मैं स्थिर का उपयोग करता हूं, तो HtmlHelpers में क्षेत्र का नाम और नियंत्रक नाम ढूंढने का आपका सुझाव क्या है?

उत्तर

22

इस का उपयोग करें: स्ट्रिंग के रूप में

string controllerName = 
(string)htmlHelper.ViewContext.RouteData.GetRequiredString("controller"); 

string areaName = 
(string)htmlHelper.ViewContext.RouteData.DataTokens["area"]; 
+0

और कार्रवाई के लिए बस उपयोग करें: var actionName = htmlHelper.ViewContext.RouteData.GetRequiredString ("action"); – Roboblob

0

मेरा मानना ​​है कि "नियंत्रक" और "क्षेत्र" कम मामला होना चाहिए। यहाँ कैसे क्षेत्र मूल्य प्राप्त करने के लिए है:

ASP.NET MVC - Get Current Area Name in View or Controller

यदि नहीं वर्तमान में एक क्षेत्र में यह एक वस्तु संदर्भ अपवाद देना होगा, इसलिए पहले अशक्त के लिए जाँच और उसके बाद मान सेट करता है, तो यह शून्य नहीं है। आपका नियंत्रक भी सही है, बस इसे कम मामले में आज़माएं। आशा है कि इस मदद करता है

3
public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName 
) 
{ 
    RouteData rd = htmlHelper.ViewContext.RouteData; 
    string currentController = rd.GetRequiredString("controller"); 
    string currentAction = rd.GetRequiredString("action"); 

    // the area is an optional value and it won't be present 
    // if the current request is not inside an area => 
    // you need to check if it is null or empty before using it 
    string area = rd.Values["area"] as string; 

    ... 
} 
+1

'rd.Values ​​[" क्षेत्र "];' हमेशा अशक्त लौट आए। – Saeid

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