我正在开发一个安装了MVC 4和Umbraco CMS的项目。我道歉 - 作为新手,我的问题可能很奇怪。
我的问题是:如何处理我不想通过Umbraco后台管理的类型?相反,它将是简单的数据来源并存储在SQL Server中。
具体来说,我想问:
SurfaceController
还是RenderMvcController
?同样,它不会是Umbraco文档类型或数据。UmbracoViewPage
,UmbracoTemplatePage
还是标准MVC视图?非常感谢你宝贵的时间,指导,分享和帮助;我非常感激。
答案 0 :(得分:14)
你在这里问了很多不同的问题。
使用umbraco Umbraco进行开发时,将外部数据嵌入您的网站并不罕见。如果我们已经告诉您,您可以使用(几乎)您在普通.Net项目中使用的任何类型的数据访问。
在提取外部数据(例如)产品时,重要的是不要丢失umbraco context。您仍然需要渲染的面包屑,要设置的活动菜单的css类等等。您的“外部数据”可能属于节点下方。因此,使用标准MVC控制器是一个坏主意。
因为您的观点是剃刀,所以您可以将所有外部数据提取到视图中的@ {...}。如果您不是一位经验丰富的程序员,那么这是有效的。虽然关于可维护性和DRY原则的主题值得怀疑: - )
当您使用RenderMvcController时,您基本上正在为特定文档类型创建Controller。每次umbraco渲染此文档类型的节点。将调用此控制器,并将您呈现的模型发送回View。正如您可能猜到的,这是我最喜欢的提取数据并将其推送到视图的地方之一。 另一方面,surface controller是部分视图的控制器,非常适合于回传形式的回发。 这两个控制器都可以用于您网站的前端,而不是后端。
您可以将自己的观点视为您想要的。但是,如果您从UmbracoViewPage继承您的视图,您仍然可以在视图中获得所有@Umbraco.Whatever
权力
因为您使用RenderMvcController“劫持”了一条路线,所以您可以信任umbraco后端以转到正确的URL。查询字符串可用于获取所需的外部数据。
有时候,如果我不能使用上面的控制器,我会在IPublishedContent上创建一个extentionMethod。像这样我可以写这样的代码:
foreach (var myObj in Model.Content.GetMyExternalData()) {
// do stuff
}
如果您需要公开数据(使用webApi包装器),请尝试UmbracoApiController。这个REST纯唱了。
你应该知道Umbraco使用petapoco作为ORM。因此,您可以(也应该)考虑使用它。您可以毫无问题地重用数据库连接。
var query = new Sql().Select("*").From("myCustomTable").Where<MyModel>(x => x.Id == id);
return DatabaseContext.Database.Fetch<MyModel>(query).FirstOrDefault();