2

好的,我还是 Asp.Net 和 MVC3 的新手。我对事物越来越熟悉,但在完成我的第一个 Web 应用程序(一个简单的 Web 表单提交到数据库中)后仍在尝试。现在我正在从事一些较小的项目,例如转换一些提交电子邮件的旧 ColdFusion Web 表单。我在 MVC3 中很容易做到这一点,但我们所有的网页都在一个单独的内容管理系统中,我们的中心 HTML 模板就在其中。我已经在这里问过一个关于这个的问题,但没有得到任何结果。

我们所拥有的是,我们的大部分网页都从 CMS 导出为直接的 HTML 文件,只有需要数据库访问或编程语言的网页才会导出为 ColdFusion。在我们的 CMS 的模板中“包含”要使用的 ColdFusion 代码非常容易。我希望能够在我的 mvc3 项目中使用这个 HTML 模板,但我发现无法执行“包含”或链接到外部文件。我不确定这将如何工作,所以我决定将模板复制/粘贴到 mvc3 并想办法在我将成为的所有小项目之间共享这个模板(现在是“布局”)工作。如果模板发生变化,我不想更新每一个小的 mvc3 Web 应用程序。我学会了使用“区域”,但似乎你可以'

我真正需要的是一种让小型 mvc3 项目使用一个模板的方法,这些小型 mvc3 项目分散在我们的 Web 服务器上。这最好在一个发布到多个不同文件夹的大型项目中完成,还是在许多可以共享公共布局的小项目中完成?这两种可能吗?

在尝试和试验了所有这些之后,我开始认为 MVC 无法满足我的需求。它似乎更适合 Intranet 应用程序或整个网站,而不是像我想要的那样的“这里和那里”应用程序。我应该学习 Web 表单吗?我知道我可以在我们的 CMS 中“包含”一个 aspx 文件,就像使用 ColdFusion 一样。

4

1 回答 1

0

您的模板是否必须从 CMS 中“导出”?或者,您能否拥有一个“存在”在静态 CMS URL 上的模板?这就是我们为需要数据库访问/无法在 CMS 中轻松完成但需要共享相同外观的应用程序所做的。

您可以做的是将普通的旧 HTML 文件放在 URL 上,例如https://cms.domain.tld/templates/designxyz.html。该文件将提供基本布局,除了您的自定义应用程序内容所在的位置外,您只需使用字符串“内容在此处”。

然后,从 MVC 应用程序中,您可以调用此 URL 以将 HTML 内容作为字符串获取。获得字符串后,您可以在“内容到这里”字符串之前和之后将其拆分为 2。然后,在您的 layout.cshtml 文件中,您可以执行以下操作:

@{
    const string contentPlaceholder = "content goes here";
    var allHtml = GetHtmlTemplateFromLiveServer();
    var index = allHtml.IndexOf(contentPlaceholder);
    var topHtml = allHtml.Substring(0, index);
    var botHtml = allHtml.Substring(index + contentPlaceHolder.Length);
}
@topHtml
@RenderBody()
@botHtml

如果这样的方法有效,您可以将所有这些抽象为 HTML 帮助程序,然后在其他项目中重用该帮助程序(NuGet 会很好)。

_Layout.cshtml

@{
    var options = new CmsTemplateRenderOptions
    {
        Url = "https://cms.domain.tld/templates/designxyz.html",
        Cache = new TimeSpan(1, 0, 0);
    };
}
@Html.RenderCmsTemplate(CmsTemplateRenderRegion.Top, options)
@RenderBody()
@Html.RenderCmsTemplate(CmsTemplateRenderRegion.Bottom, options)

然后,要更新所有应用程序的布局,您只需将更改发布到https://cms.domain.tld/templates/designxyz.html URL。

于 2012-05-18T20:33:19.757 回答