我正在阅读 http://www.orchardproject.net/docs/Creating-1-n-and-n-n-relations.ashx并且无法理解,如果可以轻松地进行主细节编辑,为了给你具体的例子,我附上了 wordpress 的截图:
所以有帖子和帖子包含一组自定义字段,简单的 1:N 关系,在一个页面中编辑的所有内容 - 您可以在不离开帖子页面的情况下添加/编辑自定义字段。
可能有人在 Internet 上看到了 Orchard 的类似示例,或者可以简短地描述通过代码实现此目的的路径,这将非常有帮助(我希望不仅对我有用,因为我认为这是很常见的情况)。
最佳答案
这应该是可能的,尽管不是以最“Orchardy”的方式。
我没有测试以下任何内容,所以它可能充满错误 - 但也许 Bertrand 或 Pszmyd 今天晚些时候会来纠正我:-)
正如您可能已经看到的,您可以在编辑器驱动程序中创建内容形状时将 View 模型传递给 View :
protected override DriverResult Editor(CatPart part, dynamic shapeHelper)
{
// Driver for our cat editor
var viewModel = new CatViewModel
{
Cats = _catService.GetCats() // Cats is IEnumerable<Cat>
};
return ContentShape("Parts_CatPart_Edit",
() => shapeHelper.EditorTemplate(
TemplateName: "Parts/CatPart",
Model: viewModel,
Prefix: Prefix
));
}
所以我们可以传入一个项目列表,并像这样在我们的 View 中呈现它:
@foreach(var cat in Model.Cats)
{
<span class="cat">
<p>@cat.Name</p>
<a href="...">Delete Cat</p>
</span>
}
这里的问题是回发更改以更新模型。 Orchard 提供了 Editor
方法的重写来处理编辑部分时的回发,我们可以恢复我们在之前方法中传递的 View 模型:
protected override DriverResult Editor(CatPart part, IUpdateModel updater, dynamic shapeHelper)
{
var viewModel = new CatViewModel();
if (updater.TryUpdateModel(viewModel, Prefix, null, null))
{
// Access stuff altered in the Cat view model, we can then update the CatPart with this info if needed.
}
}
这对于字符串或整数等基本信息非常有效。 但是我从来没有能够让它与在客户端编辑的动态列表一起工作(并且不确定是否可以这样做)。
解决此问题的一种方法是在 1:N 关系的 N 端为项目设置按钮,以便它们回发到 MVC Controller 。然后这个 Controller 可以更新模型并将客户端重定向回他们来自的编辑器,显示记录的更新版本。这将要求您始终如一地设置您在客户端添加的元素的 HTML ID/名称属性,以便在向您的 Controller 发出 POST 请求时可以读取它们,或者创建单独的嵌套表单直接提交给 Controller 。
所以你的 View 可能变成:
@foreach(var cat in Model.Cats)
{
<form action="/My.Module/MyController/MyAction" method="POST">
<input type="hidden" name="cat-id" value="@cat.Id" />
<span class="cat">
<p>@cat.Name</p>
<input type="submit" name="delete" value="Delete Cat" />
</span>
</form>
}
<form action="/My.Module/MyController/AddItem" method="POST">
<input type="hidden" name="part-id" value="<relevant identifier>" />
<input type="submit" name="add" value="Add Cat" />
</form>
另一种可能性是创建一个 Controller ,它可以将相关数据作为 XML/JSON 返回,并在客户端使用 Javascript 实现这一切。
由于内容项(及其所有部分)尚不存在,您可能需要进行一些修改才能使其在新记录的编辑器上工作(考虑创建内容项与创建内容项)。
我希望这一切都有意义,如果您有任何问题,请告诉我:-)
关于asp.net - Orchard 和主要细节编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6507662/