दिलचस्प पोस्ट
क्या मैं वॉचसर्विसेज के साथ एक फ़ाइल परिवर्तन के लिए देख सकता हूँ (पूरी निर्देशिका नहीं)? सीएसएस मीडिया प्रश्नों और जावास्क्रिप्ट विंडो चौड़ाई से मेल नहीं खाती कैसे php के साथ कर्ल का उपयोग कर फ़ाइल अपलोड करें जब सी # में स्ट्रिंग में दिखता है तो {0} क्या मतलब है? कैसे पृष्ठभूमि के रूप में एक png साजिश के लिए? Android के टेक्स्टदृश्य में छवि कैसे प्रदर्शित करें? सी ++ विन्सॉक पी 2 पी एंड्रॉइड स्टूडियो में डेटाबेस फ़ाइल की सामग्री देखें AndroidRuntime त्रुटि: पार्सल: मार्शल मान में असमर्थ कैसे विंडोज कमांड लाइन से PHP को चलाने के लिए पायथन के साथ लिनक्स में फ़ाइल अनुमतियां जांचना रीसायकलदृश्य में एकल चयन दो तिथियों के बीच दिनों की गणना करें, सप्ताहांत को छोड़कर (केवल MySQL) java.lang.NoClassDefFound त्रुटि: android.support.v7.appcompat.R $ styleable इकाई फ़्रेमवर्क – नेविगेशन सम्पत्ति मैन्युअल रूप से जोड़ें

नियंत्रक के अंदर से नियंत्रक और क्रिया नाम प्राप्त करें?

हमारे वेब अनुप्रयोग के लिए मुझे देखने के आधार पर प्राप्त किए गए और प्रदर्शित वस्तुओं के क्रम को सहेजने की आवश्यकता है – या सटीक होना – नियंत्रक और क्रिया जो दृश्य उत्पन्न करती है (और पाठ्यक्रम के उपयोगकर्ता आईडी, लेकिन यह यहां नहीं है)।

प्रत्येक नियंत्रक कार्रवाई में एक पहचानकर्ता को स्वयं देने के बजाय (डीबी आउटपुट के कुछ दृश्य-निर्भर सॉर्टिंग के लिए इसका उपयोग करने के क्रम में), मैंने सोचा कि यह पहचानकर्ता स्वचालित रूप से नियंत्रक और क्रिया विधि से स्वचालित रूप से इसे बनाने में आसान होगा से बुलाया

नियंत्रक में कार्रवाई विधि के अंदर से नियंत्रक और कार्रवाई का नाम कैसे प्राप्त कर सकता हूं? या क्या मुझे इसके लिए प्रतिबिंब की ज़रूरत है? मुझे लगता है कि यह बहुत आसान है, अग्रिम धन्यवाद!

वेब के समाधान से एकत्रित समाधान "नियंत्रक के अंदर से नियंत्रक और क्रिया नाम प्राप्त करें?"

 string actionName = this.ControllerContext.RouteData.Values["action"].ToString(); string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString(); 

जानकारी प्राप्त करने के लिए यहां कुछ विस्तार विधियां दी गई हैं (इसमें आईडी भी शामिल है):

 public static class HtmlRequestHelper { public static string Id(this HtmlHelper htmlHelper) { var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values; if (routeValues.ContainsKey("id")) return (string)routeValues["id"]; else if (HttpContext.Current.Request.QueryString.AllKeys.Contains("id")) return HttpContext.Current.Request.QueryString["id"]; return string.Empty; } public static string Controller(this HtmlHelper htmlHelper) { var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values; if (routeValues.ContainsKey("controller")) return (string)routeValues["controller"]; return string.Empty; } public static string Action(this HtmlHelper htmlHelper) { var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values; if (routeValues.ContainsKey("action")) return (string)routeValues["action"]; return string.Empty; } } 

उपयोग:

 @Html.Controller(); @Html.Action(); @Html.Id(); 

उपयोगी हो सकता है मुझे कंट्रोलर के निर्माता में कार्रवाई की जरूरत है, और यह एमवीसी जीवनचक्र के इस बिंदु पर प्रकट होता है, इसने आरम्भ नहीं किया है, और ControllerContext = null एमवीसी जीवन चक्र में प्रवेश करने और ओवरराइड करने के लिए उपयुक्त फ़ंक्शन का नाम खोजने के बजाय, मुझे सिर्फ RequestContext.RouteData में कार्रवाई मिली।

लेकिन ऐसा करने के लिए, किसी भी HttpContext साथ कंसट्रक्टर में संबंधित उपयोग करता है, आपको पूर्ण नाम स्थान निर्दिष्ट करना होगा, क्योंकि यह। this.HttpContext भी प्रारंभ नहीं किया गया है। सौभाग्य से, यह प्रतीत होता है System.Web.HttpContext.Current स्थिर है।

 // controller constructor public MyController() { // grab action from RequestContext string action = System.Web.HttpContext.Current.Request.RequestContext.RouteData.GetRequiredString("action"); // grab session (another example of using System.Web.HttpContext static reference) string sessionTest = System.Web.HttpContext.Current.Session["test"] as string } 

नोट: HttpContext में सभी गुणों को एक्सेस करने के लिए संभावित रूप से सबसे समर्थित तरीका नहीं है, लेकिन RequestContext और सत्र के लिए यह मेरे आवेदन में ठीक काम करने के लिए प्रतीत होता है।

 var routeValues = HttpContext.Current.Request.RequestContext.RouteData.Values; if (routeValues != null) { if (routeValues.ContainsKey("action")) { var actionName = routeValues["action"].ToString(); } if (routeValues.ContainsKey("controller")) { var controllerName = routeValues["controller"].ToString(); } } 

अभी तक मेरे पास इतना ही है:

 var actionName = filterContext.ActionDescriptor.ActionName; var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; 

आप किसी भी चर की तरह क्रिया से नियंत्रक का नाम या क्रिया नाम प्राप्त कर सकते हैं। वे केवल विशेष (नियंत्रक और कार्रवाई) हैं और पहले से ही परिभाषित हैं इसलिए उन्हें आपको बताए जाने के अलावा उन्हें प्राप्त करने के लिए कुछ विशेष करने की आवश्यकता नहीं है।

 public string Index(string controller,string action) { var names=string.Format("Controller : {0}, Action: {1}",controller,action); return names; } 

या आप नियंत्रक को शामिल कर सकते हैं, उनमें से दो और आपके कस्टम डेटा प्राप्त करने के लिए अपने मॉडल में कार्रवाई कर सकते हैं।

 public class DtoModel { public string Action { get; set; } public string Controller { get; set; } public string Name { get; set; } } public string Index(DtoModel baseModel) { var names=string.Format("Controller : {0}, Action: {1}",baseModel.Controller,baseModel.Action); return names; } 

यह मेरे लिए अच्छी तरह से काम करता है (अब तक), यह भी काम करता है अगर आप विशेषता राउटिंग का उपयोग कर रहे हैं

 public class BaseController : Controller { protected string CurrentAction { get; private set; } protected string CurrentController { get; private set; } protected override void Initialize(RequestContext requestContext) { this.PopulateControllerActionInfo(requestContext); } private void PopulateControllerActionInfo(RequestContext requestContext) { RouteData routedata = requestContext.RouteData; object routes; if (routedata.Values.TryGetValue("MS_DirectRouteMatches", out routes)) { routedata = (routes as List<RouteData>)?.FirstOrDefault(); } if (routedata == null) return; Func<string, string> getValue = (s) => { object o; return routedata.Values.TryGetValue(s, out o) ? o.ToString() : String.Empty; }; this.CurrentAction = getValue("action"); this.CurrentController = getValue("controller"); } } 
  @this.ViewContext.RouteData.Values["controller"].ToString(); 

ToString() कॉल उपयोग की आवश्यकता को हटाने के लिए

 string actionName = ControllerContext.RouteData.GetRequiredString("action"); string controllerName = ControllerContext.RouteData.GetRequiredString("controller"); 

इसे GetDefaults () विधि के अंदर अपने बेस नियंत्रक में जोड़ें

  protected override void OnActionExecuting(ActionExecutingContext filterContext) { GetDefaults(); base.OnActionExecuting(filterContext); } private void GetDefaults() { var actionName = filterContext.ActionDescriptor.ActionName; var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; } 

बेस कंट्रोलर को अपने नियंत्रकों को लागू करें

आंशिक दृश्य जोड़ें _Breadcrumb.cshtml और इसे @ एचटीएमएल के साथ सभी आवश्यक पन्नों में जोड़ें.पार्टील ("_ ब्रेडक्रंब")

_Breadcrumb.cshtml

 <span> <a href="../@ViewData["controllerName"]"> @ViewData["controllerName"] </a> > @ViewData["actionName"] </span> 

एक नाम प्राप्त करने के लिए सबसे आसान और सबसे व्यावहारिक उत्तर यहां दिया गया है:

 var actionName = RouteData.Values["controller"]; var controllerName = RouteData.Values["action"]; 

या

 string actionName = RouteData.Values["controller"].ToString(); string controllerName = RouteData.Values["action"].ToString(); 

Asp.net mvc 5 के साथ उपरोक्त परीक्षण कोड

कार्यवाही और नियंत्रक नाम के लिए ऑनएक्शन एक्सेप्टिंग में दिए गए लाइनों का उपयोग करें।

स्ट्रिंग एक्शननाम = यह। कंट्रोलर कॉन्टैक्ट। रूटडेटा। मूल्य ["एक्शन"]। टूस्ट्रिंग ();

स्ट्रिंग नियंत्रकनाम = this.ControllerContext.RouteData.Values ​​["नियंत्रक"]। ToString ();

क्यों कुछ सरल नहीं है?

बस Request.Path कॉल करें। Request.Path , यह "/" द्वारा अलग स्ट्रिंग वापस करेगा

और फिर आप का उपयोग कर सकते हैं। नियंत्रक का नाम प्राप्त करने के लिए .Split('/')[1]

यहां छवि विवरण दर्ज करें