MVC4共享模板

本文关键字:共享 MVC4 | 更新日期: 2023-09-27 17:58:05

我有几个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的便携式区域,但我不确定它是否有效,因为这不是一个真正的区域,我真的不知道如何设置它。在我走上这条路之前,我想知道做这件事的首选方式是什么?

MVC4共享模板

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

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