Asp.net Orchard和master细节编辑
我正在阅读,如果可以轻松地进行主细节编辑的话,我无法理解,给你一个具体的例子,我附上了wordpress的截图: 因此,存在post,post包含一组自定义字段、简单的1:N关系、在一个页面中编辑的所有内容-您可以在不离开post页面的情况下添加/编辑自定义字段。Asp.net Orchard和master细节编辑,asp.net,asp.net-mvc-3,orchardcms,Asp.net,Asp.net Mvc 3,Orchardcms,我正在阅读,如果可以轻松地进行主细节编辑的话,我无法理解,给你一个具体的例子,我附上了wordpress的截图: 因此,存在post,post包含一组自定义字段、简单的1:N关系、在一个页面中编辑的所有内容-您可以在不离开post页面的情况下添加/编辑自定义字段。 可能有人在互联网上看到了类似的Orchard示例,或者可以很快通过代码描述实现这一点的路径,这将非常有帮助(我希望不仅仅是对我来说,因为我认为这是非常常见的情况)。这应该是可能的,尽管不是以最“果园化”的方式 我没有测试过下面的任何一
可能有人在互联网上看到了类似的Orchard示例,或者可以很快通过代码描述实现这一点的路径,这将非常有帮助(我希望不仅仅是对我来说,因为我认为这是非常常见的情况)。这应该是可能的,尽管不是以最“果园化”的方式 我没有测试过下面的任何一个,所以它可能充满了错误-但也许今天晚些时候Bertrand或Pszmyd会来纠正我:-) 您可能已经看到,在编辑器驱动程序中创建内容形状时,可以将视图模型传递给视图:
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
));
}
这对于字符串或整数等基本信息非常有效。但我一直无法使用(也不确定是否可以使用)在客户端编辑的动态列表
解决这个问题的一种方法是为1:N关系的N端上的项目设置按钮,以便它们发回MVC控制器。然后,该控制器可以更新模型,并将客户端重定向回它们来自的编辑器,显示记录的更新版本。这需要您一致地设置在客户端添加的元素的HTML ID/Name属性,以便在向控制器发出POST请求时可以读取这些元素,或者创建直接提交给控制器的独立嵌套表单
因此,您的观点可能会变成:
@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>
@foreach(Model.Cats中的var cat)
{
@猫名
}
另一种可能是创建一个控制器,该控制器可以以XML/JSON的形式返回相关数据,并使用Javascript在客户端实现这一切
由于内容项(及其所有部分)尚不存在,您可能需要进行一些黑客操作,才能在新记录的编辑器上实现这一点(考虑创建内容项与创建内容项)
我希望这一切都是有意义的,如果你有任何问题,请告诉我:-)你是想作为一个普通的ASP MVC控制器还是在一个可以附加到内容项的内容部分上做这件事?我在考虑内容部分。嗯,我发现我需要先自己尝试很多事情,以便更熟悉Orchard中的一切工作方式,到目前为止,一切都不那么简单。我会把这个问题再开放几天,如果没有更好的答案,我会把你的帖子标记为答案。很抱歉,挖出一篇旧帖子,但如果不使用驱动程序,你将如何完成同样的任务?我想你会在控制器里做驱动程序的事情?你能给我举个例子吗?多谢。
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.
}
}
@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>