Asp.net mvc 如何在Umbraco中持久化和获取列表?
我是Umbraco的新手,希望在其中执行以下任务Asp.net mvc 如何在Umbraco中持久化和获取列表?,asp.net-mvc,umbraco,umbraco7,Asp.net Mvc,Umbraco,Umbraco7,我是Umbraco的新手,希望在其中执行以下任务 使用条目表单在数据库中存储电影列表 获取电影的记录并将其显示在我有模板的页面中 我不想使用JQuery、AngularJS等,而是想在服务器端使用它 任何指导都将不胜感激 另外,我对Umbraco基础知识及其局部视图宏有一些了解。为了澄清,我假设您希望在Umbraco的内容树中创建电影节点,例如在名为“所有电影”的页面下 首先,允许网站中的表单直接写入内容树是非常糟糕的做法。这就带来了一系列问题,比如用户向数据库发送垃圾邮件,并将其填满垃圾 但是
另外,我对Umbraco基础知识及其局部视图宏有一些了解。为了澄清,我假设您希望在Umbraco的内容树中创建电影节点,例如在名为“所有电影”的页面下 首先,允许网站中的表单直接写入内容树是非常糟糕的做法。这就带来了一系列问题,比如用户向数据库发送垃圾邮件,并将其填满垃圾 但是,为了使用MVC方法从Umbraco中的表单创建内容,您需要查看此处的文档。但要总结一下,您需要:
- SurfaceController上用于处理表单post请求的操作
public class MovieSurfaceController : Umbraco.Web.Mvc.SurfaceController { [HttpPost] public ActionResult SaveMovie(SaveMovieViewModel model) { if (!ModelState.IsValid) return CurrentUmbracoPage(); return RedirectToCurrentUmbracoPage(); } }
- 您的表单需要发布到您的SurfaceControl操作,例如
@using(Html.BeginUmbracoForm("SaveMovie", "MovieSurface")) { ... }
- 然后,在您的操作中,您需要访问
来创建和保存您的电影内容,将“所有电影”页面作为父页面ContentService
Services.ContentService.CreateContent( "Harold and Maude", allMoviesContent, "Movie", 0 );
- 将提交的值存储在单独的数据库表中,即与核心Umbraco数据库表分开
- 直接绕过Umbraco从该数据库表检索电影值
数据库
实例来实现这一点:
ApplicationContext.DatabaseContext.Database.Save(new Movie());
或
var item=ApplicationContext.DatabaseContext.Database.Single(movieId);
更好的做法是创建一个backoffce自定义部分,您可以在其中调节提交的电影数据(存储在独立表中),并将电影内容从此处保存到内容树中。是否要将as umbraco文档存储在树中的数据库中?您是否已经有一个数据库和充满数据的表?你是在问集成问题,还是更确切地说是如何开始使用umbraco?@dampee我是在问如何开始使用umbraco。我想使用表单将列表存储在Umbraco的数据库中,但还没有数据库。然后-问题的主要部分-加载一些记录并在一个页面的列表中显示它们(就像GridView一样)。非常感谢您,但我也希望得到问题第二部分的指导。无论如何,谢谢你;你的答案很有教育意义,也很有用。这很简单!如果将电影存储为内容,则只需通过视图中的标准
RenderModel
对象访问它们。如果要将它们作为电影记录存储在数据库中,则只需查询数据库并在模型中向下传递即可。如果我不想使用文档树中的(添加)节点,而是想将记录插入数据库,该怎么办。你能帮忙吗?不是真的,因为这太模糊了,而且你还没有表现出任何先尝试的迹象。然而,这个过程与我所描述的没有什么不同,而是将我正在写入Umbraco的API的地方替换为写入数据库。您必须选择一个数据层/orm(例如EF、NHibernate、Petapoco、LinqToSQL、Ado.Net等),然后使用它来写入数据库。我添加了一些代码来说明如何使用Umbraco的Petapoco内部实现来保存和检索数据库中的强类型数据。这可以在控制器中完成,然后作为视图模型的一部分传递。
var item = ApplicationContext.DatabaseContext.Database.Single<Movie>(movieId);