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

在MVC和Umbraco项目中使用非Umbraco数据?,umbraco,umbraco7,umbraco-mvc,Umbraco,Umbraco7,Umbraco Mvc,我正在从事一个安装了MVC4和Umbraco CMS的项目。我道歉——作为新手,我的问题可能很奇怪 我的问题是:我如何处理我不想通过Umbraco后台管理的类型?相反,这将是简单的数据进入并存储在SQL Server中 我特别想问: 我可以在MVC中创建控制器并绕过Umbraco吗 应该从哪些控制器继承?它们应该是标准MVC控制器、SurfaceController还是renderMVC控制器?同样,它将不是Umbraco文档类型或数据 视图是从UmbracoViewPage,UmbracoT

我正在从事一个安装了MVC4和Umbraco CMS的项目。我道歉——作为新手,我的问题可能很奇怪

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

我特别想问:

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

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

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

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

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

脏剃刀 因为您的视图在razor中,所以您可以将外部数据的每次提取都放入视图中的@{…}。如果你不是一个有经验的程序员,这是可行的。尽管关于可维护性和干燥原则的话题值得商榷:-)

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

继承你的观点 你可以随心所欲地处理你的观点。但是,如果您从Umbraco视图页面继承视图,您仍然拥有所有的
@Umbraco。视图中可用的任何
功能

您的URL保持不变 因为您使用RenderMvcController“劫持”了一条路由,所以您只需相信umbraco后端会转到正确的URL即可。querystring可用于获取所需的外部数据

其他控制器或方法 有时,如果我不能使用上面的控制器,我会在IPPublishedContent上创建一个ExtensionMethod。这样我就可以编写如下代码:

foreach (var myObj in Model.Content.GetMyExternalData()) {
   // do stuff
}
当然,如果需要公开数据(使用webApi包装),请尝试。这休息纯粹是唱歌

umbraco中的数据访问 你应该知道翁布拉科用的是ORM。因此你可以(也应该)考虑使用它。您可以毫无问题地重用数据库连接

var query = new Sql().Select("*").From("myCustomTable").Where<MyModel>(x => x.Id == id);
return DatabaseContext.Database.Fetch<MyModel>(query).FirstOrDefault();
var query=newsql()。从(“myCustomTable”)中选择(“*”)。其中(x=>x.Id==Id);
返回DatabaseContext.Database.Fetch(query).FirstOrDefault();

谢谢@dampee,非常感谢您的详细回复、指导和时间。您说过使用standard controller是个坏主意,这是否意味着这是个坏主意,但我仍然可以使用?另一件事,如果您能提供指导的话,是针对非Umbraco类型(我不想从后台管理的数据),我需要创建文档类型吗?它的url会是什么样的,比如说对于带有索引的HomeController,它会是domain/Home/index吗?你可以使用“标准”mvc控制器,但我找不到一个好的用例来这样做。你不需要为外部数据创建文档类型,但是,你可能需要在网站中的占位符来嵌套外部数据。对于该占位符(和节点),您将需要一个特定的documenttype。关于URL的问题非常简单,URL遵循在backoffice中创建的节点。如果您有/country/language/home,homecontroller将在home节点上触发,但不会在country或language节点上触发。没有实际/索引,因为路由是由UmbracoI管理的,非常感谢您的深入了解并在这里指导我。您在“RenderMvcController与SurfaceControllers”中说过,我的理解正确吗?对于表单(get+post请求),我应该使用SurfaceControllers,对于仅获取操作,我应该使用RenderMvcController?