คุณสามารถวาง_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);
ความเป็นไปได้อื่นคือตัวกรองการกระทำที่กำหนดเองซึ่งจะแทนที่เค้าโครง อย่างที่คุณเห็นความเป็นไปได้มากมายที่จะบรรลุเป้าหมายนี้ ขึ้นอยู่กับคุณว่าจะเลือกอันไหนดีที่สุดในสถานการณ์ของคุณ
UPDATE:
ตามที่ร้องขอในส่วนความคิดเห็นนี่เป็นตัวอย่างของตัวกรองการกระทำซึ่งจะเลือกหน้าต้นแบบ:
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;