2013-02-05 98 views
3

我有幾個MVC4項目,我想製作一組在這些項目中重複使用的顯示/編輯器模板。我想創建一個包含這些模板的通用項目,並在其他項目中引用它。MVC4共享模板

所以我在我的共同的項目中定義的視圖,與其他一些公用事業一起:

Common 
- Models 
    - CommonMetadataAttribute.cs 
- Views 
    - Shared 
    - EditorTemplates 
     - Decimal.cshtml 
     - Object.cshtml 
     - Password.cshtml 
     - String.cshtml 
     - Switch.cshtml 
    - ViewTemplates 
     - Object.cshtml 
     - Switch.cshtml 
    - Error.cstml 

而且在我的客戶項目的模型我不得不

using MobileWeb.Common 

public class MyViewModel 
{ 
    [UIHint("Switch")] 
    [CommonMetadata(Theme = "foo")] 
    public bool Enable { get; set; } 
} 

並在客戶端項目意見我可以通過簡單地調用來生成我的自定義編輯器:

@model MyViewModel 
... 
@Html.EditorFor(model => model.Enable) 

Ide同盟,客戶端項目可以用自己的模板覆蓋,如果沒有定義項目特定的模板,它將回退到通用模板。

我已經考慮過MvcContrib的便攜式區域,但我不確定它是否會起作用,因爲這不是一個真正的區域,我也不知道如何去設置它。在我走下這條路之前,我想知道這樣做的首選方式是什麼?

回答

3

就我個人而言,我一直將包裝模板作爲custom NuGets。你把你的自定義模板放在一個NuGet中,當用戶在他的項目中安裝這個NuGet時,它們會自動添加到他的應用程序的正確文件夾中。自動地,整個應用程序中的所有EditorFor/DisplayFor調用都將使用您的自定義模板而不是默認模板。

這樣你就不需要編寫一些自定義的VirtualPathProviders(只要你預編譯你的應用程序就中斷),以便檢索嵌入在第三方程序集中的Razor視圖,等等......使用NuGets是用戶在他的應用程序中有你的模板,如果他對你的工作不滿意可以很容易地修改它們。如果他真的對你生氣,他需要的只是卸載你的NuGet,以便將他的應用程序回滾到默認狀態。

+2

乾淨的主意!我會研究這個。 –

+0

好東西,謝謝@Darin –

+0

NuGet包真棒,易於創建,部署,安裝,卸載。另一個選擇是將項目導出爲VS模板'(文件 - >導出模板)'並在新的解決方案中重新使用它。 –