2

好吧,我还是新来Asp.Net和MVC3。我对事物更加熟悉,但在完成我的第一个Web应用程序(一个简单的Web表单提交到数据库)后仍然在尝试。现在我正在处理较小的项目,例如转换一些提交电子邮件的旧ColdFusion Web表单。我很容易在MVC3中实现这一点,但我们的所有网页都在独立的内容管理系统中,我们的中央HTML模板就在这里。我already asked a question about this here并没有得到任何地方。asp.net mvc3 - 外部包含或共享项目之间的布局?

我们所拥有的是我们的大部分网页从CMS导出为直接HTML文件,只有需要数据库访问或编程语言才能导出为ColdFusion的网页。在我们的CMS中“模板”内部使用ColdFusion代码很容易。我希望能够在我的mvc3项目中使用这个HTML模板,但我找不到执行“包含”或链接到外部文件的方法。我不确定这是否会起作用,所以我决定将模板复制/粘贴到mvc3,并找出一种方法,我可以在所有我将要做的小项目之间共享此模板(现在称为“布局”)工作。如果模板更改,我不想更新每一个小的mvc3 web应用程序。我了解了如何使用“区域”,但似乎您不能只将一个区域发布到Web服务器上的文件夹中,因此必须部署整个项目。

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

经过尝试和尝试所有这些,我开始认为MVC不会与我想要的一起工作。它似乎更适合于内联网应用程序或整个网站,而不是像我想要的那样的“这里和那里”应用程序。我应该学习Web窗体吗?我知道我可以在我们的CMS中“包含”一个aspx文件,就像我使用ColdFusion一样。

+0

那么,你想要一些可以通过_multiple_断开连接的站点访问的静态内容? – Tejs

+0

理想情况下,是的。像“包括”顶级导航XML这样的东西会有所帮助,但是能够将整个HTML布局分割成我可以在某处集中更新的格式不正确的块是最好的。如果通过MVC无法实现这一点,我明白Web Forms可能是最好的方法,因为我已经知道我可以**用aspx文件来做这件事。 –

+0

WebForms在这方面不会与MVC有任何不同的功能。无论如何,WebForms在MVC中也是可能的。 – Tejs

回答

0

您的模板是否必须从CMS“导出”?或者,您是否可以拥有一个“存在于”静态CMS网址上的模板?这是我们为需要数据库访问的应用程序所做的工作/无法在CMS内轻松完成,但需要共享相同的外观和感觉。

您可以做的是将您的普通旧HTML文件生成一个URL,例如,https://cms.domain.tld/templates/designxyz.html。该文件将提供基本的布局,除非您的自定义应用内容发生变化,您只需字符串“content goes here”。

然后,从MVC应用程序中,您可以调用此URL来获取HTML内容作为字符串。一旦你有了字符串,你可以在“content goes here”字符串前后分割它。然后,在你的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。

+0

真的吗?重复使用跨项目的布局似乎是一个有效的要求恕我直言。但这种方式确实很难实现,并且可以反向扩展。每次显示视图时,都必须调用URL。 –