Orchard CMS — сохранение значения строки запроса в редакторе элементов контента

В моем экземпляре 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.


person dochoffiday    schedule 11.01.2013    source источник
comment
Нет, невозможно сохранить состояние строки запроса, если вы не возьмете на себя все: контроллер, рендеринг формы и т. д. Лучше спросить, почему вы хотите поддерживать это в строке запроса. Почему это не сохраняется как свойство детали и/или скрытого поля формы? Что это за идентификатор?   -  person Bertrand Le Roy    schedule 11.01.2013


Ответы (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)
person Alexander Petryakov    schedule 25.11.2014