在我的Orchard实例中,我有一个自定义内容类型。创建内容类型的实例时,必须将查询字符串值传递给编辑器页面,以便为幕后的关联模型设置值。
问题是,只要点击“保存”或“立即发布”,查询字符串就会丢失。它不在URL中维护,并且驱动程序中对查询字符串的任何引用都返回null。
那么,有没有办法维护查询字符串的状态?
代码示例:
//GET
protected override DriverResult Editor(PerformerPart part, dynamic shapeHelper)
{
var workContext = _workContextAccessor.GetContext();
var request = workContext.HttpContext.Request;
var id = request.QueryString["id"];
}
最初,“id”设置为查询字符串参数,但在回发后查询字符串返回“null”。
注意:我使用的是Orchard版本1.6。
答案 0 :(得分:1)
如果将其保存在隐藏字段中的页面上,则可以在回发时获取查询字符串参数。 如果编辑形状依赖于此参数,那将会更难。
驱动:
protected override DriverResult Editor(PerformerPart part, dynamic shapeHelper)
{
return Editor(part, null, shapeHelper);
}
驱动:
protected override DriverResult Editor(PerformerPart part, IUpdateModel updater, dynamic shapeHelper)
{
var model = new PerformerPartEditViewModel();
if (updater != null)
{
if (updater.TryUpdateModel(model, Prefix, null, null))
{
// update part
}
}
else
{
model.StrId = _wca.GetContext().HttpContext.Request.QueryString["id"]; // if you save id in your part that you can also try get it from the part
}
if (string.IsNullOrEmpty(model.StrId))
{
// populate model with empty values
}
else
{
// populate model with right values
}
return ContentShape("Parts_Performer_Edit", () => shapeHelper.EditorTemplate(
TemplateName: "Parts/Performer",
Prefix: Prefix,
Model: model
));
}
查看
@model Smth.ModuleName.ViewModels.PerformerPartEditViewModel
@Html.HiddenFor(m => m.StrId)