我们正在努力学习 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 的只读视图......如何制作它知道我想要可编辑的视图吗?
希望这个问题有意义,并希望有人可以提供帮助。
谢谢。