Bạn có thể đặt một _ViewStart.cshtml
tệp bên trong /Views/Public
thư mục sẽ ghi đè tệp mặc định trong /Views
thư mục và chỉ định bố cục mong muốn:
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
Bằng cách tương tự, bạn có thể đặt một _ViewStart.cshtml
tệp khác trong /Views/Staff
thư mục với:
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
Bạn cũng có thể chỉ định bố cục nào sẽ được sử dụng khi trả về chế độ xem bên trong hành động của bộ điều khiển nhưng đó là mỗi hành động:
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
Tuy nhiên, một khả năng khác là bộ lọc hành động tùy chỉnh sẽ ghi đè lên bố cục. Như bạn có thể thấy nhiều khả năng để đạt được điều này. Tùy thuộc vào bạn để chọn cái nào phù hợp nhất trong kịch bản của bạn.
CẬP NHẬT:
Như được yêu cầu trong phần bình luận, đây là một ví dụ về bộ lọc hành động sẽ chọn trang chính:
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;
}
}
}
và sau đó trang trí một bộ điều khiển hoặc một hành động với thuộc tính tùy chỉnh này chỉ định bố cục bạn muốn:
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
Razor
chế độ xem nhất định , chỉ cần đặtLayout = null;