आप फ़ोल्डर के _ViewStart.cshtml
अंदर एक फ़ाइल रख सकते हैं /Views/Public
जो फ़ोल्डर में डिफ़ॉल्ट एक को ओवरराइड करेगा /Views
और वांछित लेआउट निर्दिष्ट करेगा:
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
सादृश्य द्वारा आप फ़ोल्डर के _ViewStart.cshtml
अंदर एक और फ़ाइल डाल सकते हैं /Views/Staff
:
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
आप यह भी निर्दिष्ट कर सकते हैं कि नियंत्रक क्रिया के अंदर कोई दृश्य वापस करते समय किस लेआउट का उपयोग किया जाना चाहिए लेकिन वह प्रति क्रिया है:
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
फिर भी एक और संभावना एक कस्टम एक्शन फिल्टर है जो लेआउट को ओवरराइड करेगा। जैसा कि आप इसे प्राप्त करने के लिए कई संभावनाएं देख सकते हैं। आपके लिए यह चुनना कि कौन सा आपके परिदृश्य में सबसे अच्छा है।
अपडेट करें:
जैसा कि टिप्पणी अनुभाग में अनुरोध किया गया है, एक एक्शन फ़िल्टर का एक उदाहरण है जो एक मास्टर पृष्ठ का चयन करेगा:
public class LayoutInjecterAttribute : ActionFilterAttribute
{
private readonly string _masterName;
public LayoutInjecterAttribute(string masterName)
{
_masterName = masterName;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var result = filterContext.Result as ViewResult;
if (result != null)
{
result.MasterName = _masterName;
}
}
}
और फिर एक नियंत्रक या इस कस्टम विशेषता के साथ एक क्रिया को सजाने के लिए लेआउट को निर्दिष्ट करें जो आप चाहते हैं:
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
Razor
दृश्य के लिए लेआउट को हटाना चाहते हैं, तो बस सेट करेंLayout = null;