6

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

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

具体我想问:

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

非常感谢您宝贵的时间、指导、分享和帮助;我非常感谢。

4

1 回答 1

15

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

使用 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();
于 2014-09-12T08:34:02.103 回答