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

use*_*510 6 umbraco umbraco7 umbraco-mvc

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

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

具体来说我想问:

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

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

dam*_*pee 14

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

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

不要失去你的umbraco背景

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

脏剃刀

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

RenderMvcController与SurfaceController

当您使用RenderMvcController时,您基本上是为特定文档类型创建一个Controller.每次umbraco渲染此文档类型的节点.将调用此控制器,并将您呈现的模型发送回View.正如您可能猜到的,这是我最喜欢的提取数据并将其推送到视图的地方之一.甲地面控制器在另一方面为局部视图,极为出色在HANDELING形式回发的控制器.这两个控制器都可以用于您网站的前端,而不是后端.

继承你的观点

你可以用你的意见做你想要的.但是,如果您从UmbracoViewPage继承您的视图,您仍然@Umbraco.Whatever可以在视图中使用所有可用功能

您的URL保持不变

因为您使用RenderMvcController"劫持"路线,所以您可以信任umbraco后端以转到正确的URL.查询字符串可用于获取所需的外部数据.

其他控制器或方法

有时候,如果我不能使用上面的控制器,我会在IPublishedContent上创建一个extentionMethod.像这样我可以写这样的代码:

foreach (var myObj in Model.Content.GetMyExternalData()) {
   // do stuff
}
Run Code Online (Sandbox Code Playgroud)

如果您需要公开数据(使用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();
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用"标准"mvc控制器,但我找不到一个好的用例. (2认同)
  • 您不需要为外部数据创建文档类型,但是,您可能需要在网站中使用占位符来嵌套外部数据.对于该占位符(和节点),您将需要特定的文档类型.您对URL的问题非常简单,您的URL跟随后台创建的节点.如果您有/ country/language/home,则将在主节点上触发homecontroller,但不在国家/地区或语言节点上触发.没有真实/索引,因为路由由Umbraco管理 (2认同)