你在这里问了很多不同的问题。
使用 umbraco Umbraco 进行开发时,将外部数据嵌入到您的网站中并不少见。如果我们已经告诉您,您可以(几乎)使用您在普通 .Net 项目中使用的任何类型的数据访问。
不要失去你的 umbraco 上下文
在引入外部数据(例如)产品时,不要丢失您的umbraco 上下文,这一点很重要。您仍然有要渲染的面包屑、要设置的活动菜单的 css 类等等。您的“外部数据”可能属于某个节点之下。因此,使用标准 MVC 控制器是个坏主意。
脏剃须刀
因为您的视图非常简洁,您可以将每次提取的外部数据放入视图中的 @{ ... } 中。如果你不是一个有经验的程序员,这可行。尽管关于可维护性和 DRY 原则的主题是有问题的 :-)
RenderMvcController 与 SurfaceController
当您使用RenderMvcController时,您基本上是在为特定文档类型创建控制器。每次 umbraco 渲染此文档类型的节点时。这个控制器将被调用,并且你渲染的模型被发送回视图。正如您可能猜到的,这是我最喜欢提取数据并将其推送到视图的地方之一。另一方面,表面控制器是局部视图的控制器,非常适合处理表单回发。这两个控制器都可以用于您网站的前端,而不是用于后端。
继承你的观点
你可以用你的观点做你想做的事。但是,如果您从 UmbracoViewPage 继承您的视图,您仍然拥有视图中的所有@Umbraco.Whatever
可用功能
您的网址保持不变
因为您使用 RenderMvcController “劫持”了一条路由,所以您可以相信 umbraco 后端会转到正确的 URL。查询字符串可用于获取所需的外部数据。
其他控制器或方法
有时,如果我不能使用上面的控制器,我会在 IPublishedContent 上创建一个 extensionMethod。像这样我可以写这样的代码:
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();