【问题标题】:Working with non-Umbraco data in MVC and Umbraco project?在 MVC 和 Umbraco 项目中使用非 Umbraco 数据?
【发布时间】:2014-11-06 01:43:36
【问题描述】:

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

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

具体想问一下:

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

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

【问题讨论】:

    标签: umbraco umbraco7 umbraco-mvc


    【解决方案1】:

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

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

    不要失去你的 umbraco 上下文

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

    脏剃须刀

    因为您的视图非常简洁,您可以将每次提取的外部数据放入视图中的 @{ ... } 中。如果你不是一个有经验的程序员,这可行。尽管关于可维护性和 DRY 原则的话题值得怀疑 :-)

    RenderMvcController 与 SurfaceController

    当您使用RenderMvcController 时,您基本上是在为特定文档类型创建控制器。每次 umbraco 渲染此文档类型的节点时。这个控制器将被调用,并且你渲染的模型被发送回视图。正如您可能猜到的,这是我最喜欢提取数据并将其推送到视图的地方之一。 另一方面,surface controller 是部分视图的控制器,非常适合处理表单回发。 这两个控制器都可以用于您网站的前端,而不是用于后端。

    继承你的观点

    你可以用你的观点做你想做的事。但是,如果您从 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();
    

    【讨论】:

    • 感谢@dampee,我非常感谢您的详细回复、指导和时间。你说使用标准控制器是个坏主意,这是否意味着这是个坏主意但我仍然可以使用?
    • 如果您可以指导,另一件事是非 Umbraco 类型(我不想从后台管理的数据),我需要创建文档类型吗?它的 url 将如何,例如带有索引的 HomeController,它将是 domain/Home/Index 吗?
    • 您可以使用“标准”mvc 控制器,但我找不到一个好的用例。
    • 您不需要为外部数据创建文档类型,但是,您可能需要在您的网站中需要一个占位符来嵌套外部数据。对于那个占位符(和节点),您将需要一个特定的文档类型。您对 URLS 的问题很简单,您的 URLS 遵循在您的后台创建的节点。如果你有 /country/language/home,homecontroller 将在 home 节点上触发,但不会在国家或语言节点上触发。没有真正的/index,因为路由是由Umbraco管理的
    • 我非常感谢您深入的知识并在这里指导我。您在“RenderMvcController 与 SurfaceController”中说,我的理解是否正确,对于表单(get + post 请求)我应该使用 SurfaceControllers,而对于 Get Actions 我应该使用 RenderMvcControllers?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2012-12-21
    相关资源
    最近更新 更多