Orchard CMS - 在内容项编辑器中维护查询字符串值

时间:2013-01-11 16:22:20

标签: asp.net orchardcms orchardcms-1.6

在我的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。

1 个答案:

答案 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)