3

我有几个 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)

理想情况下,客户项目可以用他们自己的模板覆盖,如果没有定义项目特定的模板,它就会回退到通用模板。

我考虑过 MvcContrib 的便携式区域,但我不确定它是否会起作用,因为这不是一个真正的区域,我真的不知道如何设置它。在我走这条路之前,我想知道这样做的首选方式是什么?

4

1 回答 1

3

就我个人而言,我一直将模板打包为custom NuGets. 您将自定义模板放在 NuGet 中,当用户在其项目中安装此 NuGet 时,它们会自动添加到其应用程序的正确文件夹中。并且整个应用程序中的所有 EditorFor/DisplayFor 调用都会自动开始使用您的自定义模板而不是默认模板。

这样,您无需编写一些自定义 VirtualPathProviders(一旦您预编译应用程序就会中断)来检索嵌入在第三方程序集中的 Razor 视图等等......使用 NuGets 的另一个优点是用户在他的应用程序中有您的模板,如果他对您的工作不满意,可以轻松修改它们。如果他真的生你的气,他只需要卸载你的 NuGet 以将他的应用程序回滚到默认状态。

于 2013-02-05T21:33:06.113 回答