XSL(如)声明式语言作为强类型模型的MVC视图?

时间:2008-11-19 08:32:46

标签: asp.net-mvc xslt declarative

作为一个巨大的XSL粉丝,我很高兴在我们在ASP.NET上的专有MVC框架中使用xsl作为视图。使用.NET的xml序列化器在模型中对象进行序列化,我们使用相当原子的xsl模板来声明每个对象或属性应该如何转换。

例如:

  <xsl:template match="/Article">
    <html>
      <body>
        <div class="article">
          <xsl:apply-templates />
        </div>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="Article/Title">
    <h1>
      <xsl:apply-templates />
    </h1>
  </xsl:template>

  <xsl:template match="@*|text()">
    <xsl:copy />
  </xsl:template>

这种机制允许我们快速覆盖默认匹配模板,比如在列表中的最后一项或选定的模板上匹配模板等。另外,.NET中的xsl扩展对象只允许我们额外的抓地力我们需要的。可以拆分和包含通用共享模板。

然而

即使我可以忽略xsl的冗长缺点(因为Visual Studio架构intellisense +片段真的很光滑,赞美VS团队),但是对模型中的强类型对象没有智能感知的缺点实际上是在窃听我

我已经看到ASP.NET MVC +用户控件正在运行并真正开始喜欢它,但我想知道;

有没有一种方法可以获得某种我们正在迭代的XML的智能感知,或者您是否知道提供XSL的自由和声明性的语言,但具有强大的类型/智能感知功能,例如webforms / usercontrols / asp.net.mvc视图?

(我可能知道答案:“不”,我会发现很快就会使用Phil Haack非常酷的mvc shizzle ......)

2 个答案:

答案 0 :(得分:1)

您可以使用对象的序列化(xml)形式,并使用VS的XML编辑器进行编辑(我使用的是VS2008)。

然后将xsd架构与此xml文档相关联。使用xsd,exe生成的模式以及它在序列化/反序列化中使用的模式。

您将看到免费获得智能感知

此外,如果您编辑架构并添加

    <xs:annotation>
      <xs:documentation>
        Helpful Explanation.
      </xs:documentation>
    </xs:annotation>

然后,XML编辑器不仅会提示您可能的元素或属性名称和值,而且还会为每个人弹出“有用的解释”其中包含输入到xml架构中的注释数据。

要了解如何将xml架构与xml文档相关联,请查找local VS2008 helpfind it on MSDN online,或阅读here

希望这会有所帮助。

干杯,

Dimitre Novatchev

答案 1 :(得分:0)

这是一个偏离主题但是已经沿着创建带有xsl(t)的CMS的路线以及由于其他原因而导致我推荐asp.net mvc的痛苦而不是intellisense。但那很好。

我最初使用xsl将视图与数据区分开来。但设计师发现它很难走,主要是因为它们看起来都像是html。更多尖括号等等。我一直在进行对话,“但为什么我不能在其中找到所有的文件”

Xsl也很懒散,而且记忆力很大。内存不足的错误令人尴尬,当你让它们迟到的时候。当然,缓存只会占用更多内存。

自从我们使用MVC以来,确实没有回头看,如果你真的喜欢冒险,甚至可以选择创建自己的视图引擎。所以你可以在那里留下一点xsl,你觉得有需要。

事实上,MVCContrib库中已有一个基于该项目的项目。

希望这有助于您的决定