में नियंत्रक और क्रिया का नाम प्राप्त करें मैं स्टैक ओवरफ्लो के लिए काफी नया हूं इसलिए कृपया मेरी अज्ञानता के किसी भी संकेत को क्षमा करें। :)एएसपी.नेट एमवीसी सी # कक्षा
मेरे पास विजुअल स्टूडियो 2010 (सी # में लिखित नियंत्रकों) में एक एमवीसी अनुप्रयोग के साथ कुछ मामूली समस्या है। मैं एक ऐसी विधि बनाना चाहता हूं जो एक एप्लिकेशन एक्शन इतिहास उत्पन्न करे और उस उद्देश्य के लिए मैं हर बार उपयोग किए जाने वाले नियंत्रक और क्रिया का नाम प्राप्त करना चाहता हूं। दुर्भाग्यवश स्ट्रिंग का पहला अक्षर जो मेरे नियंत्रक का नाम रखता है हमेशा याद रहता है।
string url = HttpContext.Current.Request.RawUrl;
RouteData route = RouteTable.Routes.GetRouteData(new OwnedContext(url));
var values = route.Values;
string controllerName = values["controller"].ToString();
string actionName = values["action"].ToString();
कहाँ OwnedContext इस तरह परिभाषित किया गया है: मैं इस कोड का इस्तेमाल किया
private class OwnedContext : HttpContextBase
{
private readonly HttpRequestBase mockHttpRequestBase;
public OwnedContext(string appRelativeUrl)
{
this.mockHttpRequestBase = new OwnedRequest(appRelativeUrl);
}
public override HttpRequestBase Request
{
get { return mockHttpRequestBase; }
}
}
कार्रवाई का नाम सही ढंग से संग्रहीत किया जाता है, लेकिन जब मैं इस कोड डीबग मैं देखता हूँ कि controllerName स्ट्रिंग का नाम धारण नियंत्रक लेकिन पहला (पूंजी) पत्र हमेशा गायब होता है, भले ही यूआरएल स्ट्रिंग इस पैटर्न के साथ एक मान रखती है:/नियंत्रक/क्रिया।
मैं किसी भी पॉइंटर्स, कोड उदाहरण या स्पष्टीकरण की सराहना करता हूं कि ऐसा क्यों होता है। अगर मेरा विवरण सही नहीं है तो मुझे बताएं, मैं इसे बेहतर बनाउंगा।
अग्रिम :)
संपादित करें धन्यवाद: समाधान:
मिले समस्या (एक तरह से): वहाँ कुछ गड़बड़ OwnedContext साथ (मेरे मूल प्रश्न में परिभाषित) था। पहले तो मुझे routeValueDictionary इस्तेमाल किया रूप HarHaHu सुझाव दिया लेकिन मूल समस्या कायम, जब तक मैं GetRouteData के पैरामीटर के रूप में HttpContext रखा:
string url = HttpContext.Current.Request.RawUrl;
RouteData route = RouteTable.Routes.GetRouteData(httpContext);
UrlHelper urlHelper = new UrlHelper(new RequestContext(httpContext, route));
var routeValueDictionary = urlHelper.RequestContext.RouteData.Values;
string controllerName = routeValueDictionary["controller"].ToString();
string actionName = routeValueDictionary["action"].ToString();
कहाँ HttpContext एक कस्टम गेटर है:
public new HttpContextBase httpContext
{
get
{
HttpContextWrapper context =
new HttpContextWrapper(System.Web.HttpContext.Current);
return (HttpContextBase)context;
}
}
इस तरह से मैं OwnedContext छोड़े गए और आखिर में मेरे नियंत्रक का पूरा नाम मिला (उदाहरण के लिए: फर्नीचर और नहीं urniture)।
युक्तियों के लिए धन्यवाद। :) उम्मीद है कि यह किसी की मदद करता है। सौभाग्य!
global.asax से अपनी रूट परिभाषाओं को पोस्ट करने का कोई मौका? जाहिर है यूआरएल मार्ग से रूट का गलत अनुवाद हो रहा है। – Dave
मेरे global.asax में MVC3 एप्लिकेशन टेम्पलेट के साथ उत्पन्न डिफ़ॉल्ट मार्ग शामिल हैं –