【问题标题】:ASP.NET MVC Views Extensibility at runtimeASP.NET MVC 在运行时查看可扩展性
【发布时间】:2013-03-07 15:03:27
【问题描述】:

我们正在将我们的应用程序迁移到 .NET。主要目标之一是允许修改每个客户端的应用程序,但不允许修改源代码。我们通过对接口进行编程并使用依赖解析器(具有覆盖基本注册的选项)和 MEF 在核心框架中解决了这个问题。

现在,当涉及到视图(客户端看到的 UI)时,模板看起来是静态的,如果客户端想要在屏幕上添加新字段,他们似乎需要修改视图本身。

我能想到的唯一两件事就是修改viewengine的搜索路径。这将允许复制基础并获取对它的更改。不是很喜欢这个,因为它是代码的副本。

另一种方式,我们现在正在做的是,我们创建一个类,该类是其他输出 HTML 的对象的容器。基本上,我们有一个 PageObject、LabelObject、InputObject..ect,我们可以调用它们来渲染和输出 HTML。因为它们是类,所以我们可以使用与其他应用相同的方法来给出分片。走这条路,我们实际上并没有使用视图引擎进行渲染,而只是为了组合所有的局部视图。看起来有点笨重。

是否有不同的方法来实现这个目标,或者我可以使用不同的视图引擎来实现允许在不触及基本视图的情况下为客户定制的目标?我知道 HTML 不是一个对象,但在处理 HTML 并允许自定义时,似乎必须在 ASP.NET WebForms 和 ASP.NET MVC 之间存在一些东西。

【问题讨论】:

    标签: c# asp.net-mvc template-engine


    【解决方案1】:

    我会创建一个强类型的局部视图或模板(DisplayTemplate 或 EditorTemplate 基于要求),其@model 是呈现为输入和标签的事物的集合。允许客户端从持久化集合中添加/删除项目(即在数据库中),您的问题可以使用内置的 ViewEngine 解决。

    【讨论】:

    • 我怎样才能让网站看起来不错?我个人不认为 displaytemplate 或 editortemplate 看起来不错。我可以使用数据库来驱动显示,但我又不会真正使用视图引擎。
    • 取决于你认为什么是不错。您可以根据需要使用 CSS 设置样式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    相关资源
    最近更新 更多