2011-12-07 39 views
5

Trong dự án MVC của tôi có 2 Vùng là Admin và Client và tôi cần cấu hình động Layout cho phía Client, Trong file _ViewStart (trong client) sẽ thiết lập layout cho tất cả các trang của khách hàng.Đường dẫn bố trí thay đổi ViewStart động trong MVC 3

Layout = "~/Views/Shared/_Layout.cshtml"; 

Vì vậy, nếu cần thay đổi bố cục khách hàng, chúng tôi có thể thay đổi Đường dẫn bố cục của tệp cshtml trong tệp _ViewStart phải không? Tôi không thể tìm thấy làm thế nào để thay đổi bên trong tập tin ViewStart hoặc là có một giải pháp trong trường hợp này.

Cảm ơn sự giúp đỡ của bạn :)

Trả lời

11

Ghi bất cứ điều gì trong @{ ... } được coi là đang. Vì vậy, nên đặt một điều kiện đơn giản trong đó để thay đổi cách nó được kế thừa:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    if (User.Current.IsAuthenticated) { 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
    } 
} 

Mặc dù bạn đang tìm kiếm chủ đề tốt hơn (và có chủ đề quản trị/người dùng). Ngoài ra, bạn có thể làm cho thông số _Layout.cshtml thông minh hơn và giúp nó xử lý các chế độ xem khác nhau dựa trên các điều kiện.

Xem thêm: MVC3 Razor - Is there a way to change the Layout depending on browser request?

6

Câu hỏi của bạn không có đủ thông tin để cung cấp cho bạn mẫu mã hoàn chỉnh.

Nhưng về cơ bản bạn có thể làm điều này

if (InsertIsAdminLogicHere) { 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
} else { 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

Nếu bạn cho chúng ta thấy làm thế nào bạn xác định admin hay không, chúng tôi có thể cung cấp trợ giúp thêm.

hy vọng điều này giúp

0

Bạn có thể tận dụng lợi thế của Bố cục lồng nhau. Tạo một bộ điều khiển cơ sở và điều khiển tất cả các bộ điều khiển từ bộ điều khiển này.

public class ControllerBase : Controller 
{ 
    public ControllerBase() 
    { 
     ViewBag.Theme = "~/Views/Shared/Default/Views/_Layout.cshtml"; 
    } 
} 

public class HomeController : ControllerBase 
{ 
    public ActionResult Index() 
    { 

     return View(); 
    } 
} 

_ViewStart.cshtml (không thực hiện bất kỳ thay đổi trong tập tin này)

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

Views/Shared/_Layout.cshtml Đây là tập tin Layout mặc định của Asp.NET MVC. Làm trống và thay thế các dòng này.

@{ 
    Layout = ViewBag.Theme; 
} 

@RenderBody() 

Bạn có thể sửa đổi cách này cho Khu vực. Bạn có thể lấy thông tin mẫu đang hoạt động trong BaseController từ cơ sở dữ liệu hoặc bất cứ nơi nào bạn muốn.

Btw, nếu bạn muốn đặt quan điểm của bạn bên ngoài của ~/Lần đọc thư mục tìm kiếm cho ThemeableRazorViewEngine

0

trong Views/_ViewStart.cshtml

@{  
object multiTenant; 
if (!Request.GetOwinContext().Environment.TryGetValue("MultiTenant", out multiTenant)) 
{ 
    throw new ApplicationException("Could not find tenant"); 
} 
Layout = "~/Views/"+ ((Tenant)multiTenant).Name + "/Shared/_Layout.cshtml"; 
} 
Các vấn đề liên quan