2

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

4

1 回答 1

2

如果您将其保存在隐藏字段的页面上,则可以在回发时获取查询字符串参数。如果编辑形状取决于这个参数,它会有点困难。

司机:

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)
于 2014-11-25T12:53:27.033 回答