2011-09-12 9 views
30

Tôi vừa thêm một khu vực Quản trị mới vào dự án của mình khi dự án bắt đầu trở nên khá lớn và tôi muốn giữ cấu trúc đó.Làm cách nào để quản lý các khu vực MVC và RenderAction trong các bộ điều khiển khác nhau?

Tôi có chế độ xem _ViewStart.cshtml để đặt trang bố cục được chia sẻ để bao gồm một menu và một phần với một số thông tin người dùng. Vì điều này không được thêm vào trang khu vực của tôi, tôi cũng đã thêm tệp _ViewStart vào khu vực của mình.

Tệp này đặt bố cục thành "~/Views/Shared/_Layout.cshtml", nằm ngoài vùng Quản trị của tôi. Tuy nhiên, tệp _Layout bao gồm phương thức RenderAction() gọi phương thức Hành động con trên bộ điều khiển để hiển thị. Vấn đề là rằng khu vực này dường như không có tầm nhìn của bộ điều khiển này và vì vậy ném ngoại lệ sau đây:

The controller for path '/Admin/LeadOrigin' was not found or does not implement IController. 

các điểm mà nó xảy ra mặc dù là ở đây:

Line 70:   <div id="logindisplay"> 
Line 71:    @{ 
Line 72:     Html.RenderAction("UserInfo", "Account");    
Line 73:    } 
Line 74:   </div> 

các RenderAction() ở trên hoạt động bình thường khi bộ điều khiển tài khoản nằm trong phạm vi của khung nhìn, trong khi trong khu vực quản trị, có vẻ như nó không có phạm vi của bộ điều khiển này.

Bất kỳ ý tưởng nào về cách giải quyết vấn đề này?

Trả lời

53

Bạn có thể chỉ định khu vực này như một phần của RouteValueDictionary (hoặc chỉ đối tượng của các giá trị đường) mà RenderAction mất như một tham số thứ ba trong trường hợp của bạn:

Html.RenderAction("UserInfo", "Account", new { area = "" }); 

Đây là giả bộ điều khiển tài khoản là trong thư mục gốc khu vực.