देखने में वर्तमान नियंत्रक प्राप्त करें


127

मेरे पास एक View - _Editजीवन है News M/V/C

मैं के V/Mमाध्यम से पुन: उपयोग CategoryController:

return PartialView("/Views/News/_Edit.cshtml", model);

View - _Editमैं नियंत्रक नाम से कैसे सचेत हो सकता हूं?

जब मैं:

alert('@ViewContext. RouteData.Values["controller"].ToString()');

मान है: News हालाँकि, URL है:/Category/foobar

क्या 'Category'अलर्ट करने के लिए मूल्य प्राप्त करने का एक तरीका है ? धन्यवाद


आपके पास नहीं है NewsController?
शिकारी

अपनी कार्रवाई पोस्ट करें methodजाता है कि लोड हो रहा है partialviewऔर क्या controllerहै कि methodमें मौजूद है।
शिकारी

जवाबों:


193

मैंने इसे अपने आंशिक दृष्टिकोण में रखा है:

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()

इस तरह की स्थिति में आप वर्णन करते हैं, और यह आंशिक दृश्य के वास्तविक स्थान के बजाय URL में वर्णित नियंत्रक (आपके लिए श्रेणी, मेरे लिए उत्पाद) को दर्शाता है।

इसलिए इस अलर्ट का उपयोग करें:

alert('@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()');

25
पाल्पी द्वारा नीचे दिया गया उत्तर एक (याद करने में आसान) शॉर्टकट है:@ViewContext.RouteData.Values["controller"]
लाउजिन

6
बस एक फी, तुम पाने की जरूरत नहीं है HttpContext.CurrentRequestसीधे उपलब्ध है।
सेरज सगन

क्या नामस्थान सहित पूर्ण नियंत्रक वर्ग नाम प्राप्त करना संभव है? इसके अलावा यह देखने के नाम को दिखाने में भी सक्षम होगा।
जॉनक्ले

3
btw, ["action"]काम करता है अगर आप कार्रवाई विधि का नाम चाहते हैं।
Zapnologica

117

मैं इसे इस तरह से करता हूं, लेकिन शायद यह केवल ASP.NET MVC 4 है

@ViewContext.RouteData.Values["controller"]

12
ध्यान रखें कि आपका समाधान उस नियंत्रक को लौटा देगा जो वर्तमान में निष्पादित हो रहा है। इसलिए, यदि कोई ब्राउज़र नियंत्रक के लिए एक अनुरोध करता है, और नियंत्रकए नियंत्रकबी से एक आंशिक दृश्य प्रस्तुत करता है, तो आपका समाधान नियंत्रक के नाम को वापस कर देगा, जबकि निकोलस सिज़र समाधान नियंत्रक के नाम को लौटा देगा।
थॉमस सीजी डी विलेना

सर्वश्रेष्ठ उत्तर के रूप में स्वीकार किया जाना चाहिए। यह ASP.NET Core 2.2
Tom

21

सभी नियंत्रकों के लिए आधार वर्ग बनाएँ और यहाँ नाम विशेषता रखें:

public abstract class MyBaseController : Controller
{
    public abstract string Name { get; }
}

दृश्य में

@{
    var controller = ViewContext.Controller as MyBaseController;
    if (controller != null)
    {
       @controller.Name
    }
}

नियंत्रक उदाहरण

 public class SampleController: MyBaseController 
    { 
      public override string Name { get { return "Sample"; } 
    }

कृपया बताएं कि Nameसंपत्ति कैसे सेट हो जाती है?
एरिक


5

महज प्रयोग करें:

ViewContext.Controller.GetType().Name

इससे आपको पूरे कंट्रोलर का नाम मिल जाएगा


2

आप अपने फ़ोल्डर से CategoryControllerलोड कर रहे हैं, भले ही आप अभी भी आपके संदर्भ में हैं ।PartialViewViews/News


0

नियंत्रक नाम प्राप्त करने के लिए आप नीचे दिए गए किसी भी कोड का उपयोग कर सकते हैं

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();

यदि आप MVC 3 का उपयोग कर रहे हैं तो आप उपयोग कर सकते हैं

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.