我想提供不同的视图,这些视图根据Action使用不同的ViewModel对象。这可以在常规的ASP.NET MVC范例中实现。
[HttpGet]
public ActionResult Create() {
return View(new CreateViewModel()); //this serves Create.cshtml View
}
[HttpGet, ActionName("Create")]
public ActionResult CreatePOST(CreateViewModel viewModel) {
if (!ModelState.IsValid) {
return View(viewModel); //if error, re-serve Create.cshtml View
}
// Create new model into database
return RedirectToAction("Index");
}
[HttpGet]
public ActionResult Edit(int Id) {
var model = RetriveModel(Id);
var viewModel = new EditViewModel { Id = model.Id, Name = model.Name };
return View(viewModel); //this serves Edit.cshtml
}
[HttpPost, ActionName("Edit")]
public ActionResult EditPOST(EditViewModel viewModel) {
if (!ModelState.IsValid) {
return View(viewModel); //if error, re-serve Edit.cshtml View
}
// Update model in database
return RedirectToAction("Index");
}
如何对果园内容部分执行相同操作?似乎ContentPartDriver中可重写的Editor方法将Create和Update操作融合在一起。如何判断该方法是创建还是更新?就像是
// GET
protected override DriverResult Editor(CustomContentPart part, dynamic shapeHelper) {
if (IsNewRecord) {
return ContentShape("Parts_CustomContentPart_Create" () =>
shapeHelper.EditorTemplate(TemplateName: "Parts/CreateTemplate", Model: new CreateViewModel(), Prefix: Prefix)
);
} else {
return ContentShape("Parts_CustomContentPart_Edit" () =>
shapeHelper.EditorTemplate(TemplateName: "Parts/EditTemplate", Model: BuildEditViewModel(part), Prefix: Prefix)
);
}
}
// POST
protected override DriverResult Editor(CustomContentPart part, IUpdateModel updater, dynamic shapeHelper) {
object viewModel;
if (IsNewRecord) {
viewModel = new CreateViewModel();
} else {
viewModel = new EditViewModel();
}
update.TryUpdateModel(viewModel, Prefix, null, null);
return Editor(part, shapeHelper);
}
我是Orchard的初学者,仍然在学习Orchard的工作方式。如果我的问题太琐碎,请原谅我。
最佳答案
检查内容项ID,如果为null,或者可能为0(我忘记了),那么您正在创建内容项。如果它确实有值,那么您正在编辑。您也可以在自己的视图中使用它,非常方便。
如果需要在创建/更新时调用自定义功能,则可以考虑使用处理程序方法?
因此,在零件处理程序中添加类似
OnCreated<MyPart>((ctx, part) => CreateItems(part));
其中CreateItems是将您的零件作为参数的方法。您可以加入许多内容项事件,文档中有一个简洁的列表:http://docs.orchardproject.net/Documentation/Understanding-content-handlers
与往常一样,检查源代码以获取有关其用法的良好示例。
编辑
显然检查null id无效,我检查了一些我使用过的模块,并使用了以下检查:
Model.ContentItem.VersionRecord == null || !Model.ContentItem.VersionRecord.Published
关于c# - 在Orchard CMS的Content Part Driver中从更新中区分创建,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21746618/