0

我们正在努力学习 Orchard,目标不是创建网站,而是创建以业务为中心的 Web 应用程序,我们通常会在几个月内使用 MVC 编写这些应用程序,但希望通过使用现有的各种部件来提高效率。

不过,最后一英里似乎是一个很大的障碍——如何告诉 Orchard 它应该创建一个允许最终用户编辑某些数据的形状?在为 Orchard 创建一个用于存储来自前端的数据的模块中,大多数最终用户的编辑都有一些好处,但它会在数据已经输入后拾取并通过控制器的 POST 操作进行传输。我想不通的是如何通过初始 GET 操作。

详细地说,在直接的 MVC 中,我可能允许用户输入关于他们自己的信息。所以我有 /Controllers/PersonController.cs 并在那里编写一个 Create() 函数。我会在 /Views/Person/Create.cshtml 中添加一个视图,然后从控制器中简单地“返回 View()”。在 HTTPGet 方法 Create(Person p) 中,我会做繁重的工作来保存对象。

现在在 Orchard 我有我的 PersonPart 和它的 PersonPartDriver,正如我从上面的文章中了解到的那样,我将编写我的 POST 方法来接受 PersonPart 并保存对象。

class PersonController : Controller
{
   private readonly IRepository<PersonPartRecord> personRepository;

   public PersonController(IRepository<PersonPartRecord> _personRepository) {
      personRepository = _personRepository;
   }

   [HttpPost]
   public Create(PersonPart part) {
      personRepository.Create(part.Record);
   }
}

很好,但是我如何让 Orchard 调用 GET Editor(PersonPart, dynamic) 方法来为用户创建表单以进行初始数据输入?

protected override DriverResult Editor(PersonPart part, dynamic shapeHelper)
{
    return ContentShape("Parts_Person_Edit",
                        () => shapeHelper.EditorTemplate(
                                          TemplateName: "Parts/Person",
                                          Model: part,
                                          Prefix: Prefix));
}

还是我在控制器中编写 GET Create() 方法?但是,如果我这样做,我会绕过整个形状创建系统,不是吗?我的大脑后部有些痒,说我宁愿做一个 Display() 并且在模板中,只是让它成为一个可编辑的表单,但我有一个 Display() 用于 Person 的只读视图......如何制作它知道我想要可编辑的视图吗?

希望这个问题有意义,并希望有人可以提供帮助。

谢谢。

4

1 回答 1

0

看看Orchard.CustomForms

var model = _contentManager.BuildEditor(contentItem);
 return View(model);

但你需要类似上面的代码。ShapeResult(this,model)你也可以回来

于 2014-06-24T06:36:10.637 回答