2010-12-08 47 views
5

我創建了一個區域,可以處理我們的所有開發產品中的一些泛型事物,就像登錄,HTML助手等一樣。我試圖引用該區域以外的部分視圖。我已經註冊了面積Asp.net MVC - 渲染區域的局部視圖

public class Routes : AreaRegistration 
{ 
    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Common_default", 
      "Common/{controller}/{action}/{id}", 
      new { 
       controller = "Account", 
       action = "Index", 
       id = UrlParameter.Optional 
      }); 
    } 

    public override string AreaName 
    { 
     get { return "MvcCommons"; } 
    } 
} 

現在在常規項目,我想引用在MvcCommons區景色...

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h2>TestGrid</h2> 

<% Html.RenderPartial("jQGridTable", ViewData.Model); %> 

但我不斷收到該視圖未找到。之前,在創建MVC Commons項目時,我收到了視圖錯誤,但錯誤告訴我它在區域文件夾和默認視圖文件夾中均顯示。這一次,我只獲取默認文件夾。有什麼辦法可以做到這一點?

謝謝大家!

回答

5

我實際上並沒有這樣做,但我猜想我應該使用Html.RenderAction()來代替Html.RenderAction("action", "controller", new { area = "Area", model = ViewData.Model })

模型必須替換爲動作參數的名稱,但這應該起作用。

編輯雖然這將需要每個動作的控制器和視圖設置。

0

Default ViewEngine在引用用戶控件的相同區域(或根目錄)文件夾內查找Views。如果你想創建一個自定義的方式來使用或存儲視圖,我建議你創建一個自定義的ViewEngine。請看一下這個例子:Implement Theme Folders using a Custom ViewEngine

0

需要記住的一件重要的事情是,當使用RenderPartial時,您可以在當前操作的上下文中使用它。

由於您的操作不在某個區域,因此只會查看操作所屬控制器的視圖/文件夾,然後是共享文件夾。

您希望在區域和控制器之間共享的任何視圖,並且在路徑上可用應該是根視圖/共享文件夾。真的,如果視圖可以像這樣的部分被調用,那麼它可能屬於某個區域的原因可能很少。

當您想渲染動作而不是部分時,您可以調用區域 - 然後將當前動作的上下文更改爲您調用的動作,從而允許您返回該區域內的視圖。