在MVC和Umbraco项目中使用非Umbraco数据?

时间:2014-09-12 00:07:26

标签: umbraco umbraco7 umbraco-mvc

我正在开发一个安装了MVC 4和Umbraco CMS的项目。我道歉 - 作为新手,我的问题可能很奇怪。

我的问题是:如何处理我不想通过Umbraco后台管理的类型?相反,它将是简单的数据来源并存储在SQL Server中。

具体来说,我想问:

  • 我可以在MVC中创建一个控制器并绕过Umbraco吗?
  • 应该继承哪些控制器?它们应该是标准MVC控制器,SurfaceController还是RenderMvcController?同样,它不会是Umbraco文档类型或数据。
  • 视图是继承自UmbracoViewPageUmbracoTemplatePage还是标准MVC视图?
  • 这些视图,控制器和操作的URL将如何更改?在Umbraco中,URL取决于内容树,但它与非Umbraco控制器,视图和操作的关系如何?

非常感谢你宝贵的时间,指导,分享和帮助;我非常感激。

1 个答案:

答案 0 :(得分:14)

你在这里问了很多不同的问题。

使用umbraco Umbraco进行开发时,将外部数据嵌入您的网站并不罕见。如果我们已经告诉您,您可以使用(几乎)您在普通.Net项目中使用的任何类型的数据访问。

不要失去你的umbraco背景

在提取外部数据(例如)产品时,重要的是不要丢失umbraco context。您仍然需要渲染的面包屑,要设置的活动菜单的css类等等。您的“外部数据”可能属于节点下方。因此,使用标准MVC控制器是一个坏主意。

脏剃刀

因为您的观点是剃刀,所以您可以将所有外部数据提取到视图中的@ {...}。如果您不是一位经验丰富的程序员,那么这是有效的。虽然关于可维护性和DRY原则的主题值得怀疑: - )

RenderMvcController与SurfaceController

当您使用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中的数据访问

你应该知道Umbraco使用petapoco作为ORM。因此,您可以(也应该)考虑使用它。您可以毫无问题地重用数据库连接。

var query = new Sql().Select("*").From("myCustomTable").Where<MyModel>(x => x.Id == id);
return DatabaseContext.Database.Fetch<MyModel>(query).FirstOrDefault();