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 に答える