1

Ektronの問題について助けを求めています。

シナリオは、いくつかのページに配置されたいくつかのウィジェットがあるというものです。これらのウィジェットはすべてユーザー入力を受け取ります。ユーザーがフォームに入力するページを移動すると、フィールドの応答がセッション状態オブジェクトに保存され、後でデータベースに書き込まれます。ユーザーがフォームの最後に到達したら、ユーザーが入力したすべてのウィジェットを読み取り専用モードで表示します。これは要約ページとして機能します。

クエリ文字列パラメーターまたはCMS編集可能フィールドを使用して、ウィジェットの各入力コントロールを読み取り専用に簡単に設定できます。また、セッション状態からユーザーの応答をウィジェットにロードして戻すこともできます。

問題が発生しているのは、CMSで編集されたコンテンツをウィジェットにロードして戻すことです。

以前に表示したウィジェットをリロードする方法はありますか?たぶん、Ektron APIを使用するIDによって?

WidgetBase.Hostオブジェクトを試してみましたが、機能させることができませんでした。また、ウィジェットオブジェクト全体をセッション状態で保存し、別のページに再ロードしようとしましたが、これも機能しませんでした。

4

2 に答える 2

2

あなたのコードでは、
using Ektron.Cms.PageBuilder;
using Ektron.Cms.Widget;

// The CMS Content ID of the first page of your form. 
const long otherPageId = 1036;

PageModel pm = new PageModel();
PageData pd = null;
pm.Get(otherPageId, out pd, false);
foreach (Ektron.Cms.PageBuilder.WidgetData w in pd.Widgets)
{

    WidgetTypeData myWidgetType;
    IWidgetTypeModel typeModel = Ektron.Cms.Widget.WidgetTypeFactory.GetModel();
    typeModel.FindByControlURL(w.ControlURL, out myWidgetType);

    // you may have to prefix the ControlURL with "/Widgets/" + w.ControlURL
    UserControl myWidget = Page.LoadControl(w.ControlURL) as UserControl;

    // _host is your page's widget host controller. 
    _host.PopulateWidgetProperties(ref myWidget, ref myWidgetType, w.Settings);
}

これで、ページに追加できmyWidgetます。
そのプロパティを読みたい場合。まず、ウィジェットのタイプが必要です。ASPXページでは、次を使用でき <%@ Reference Control="~/widgets/YourWidget.ascx" %> ます。コードの横のファイルでは、コントロールのタイプをとして参照できますwidgets_YourWidget。castmyWidgetを次のように入力できますwidgets_YourWidget

于 2012-09-27T19:41:12.093 に答える
1

あなたは面白い状況を提起します。最後に、PageBuilderを使用するかどうかはわかりません。各ウィジェットコントロールファイル(.ascx)へのパスを保存できる場合は、最後に.aspxページがあり、これらの各ウィジェットをコントロールとしてロードするだけです。

そのためには、ウィジェットを少し変更する必要がある場合があります。基本的に、使用する前に_hostがnullでないことを確認します。そのようです:

_host = Ektron.Cms.Widget.WidgetHost.GetHost(this);
if (_host != null)
{
    _host.Title = "Widget Name";
    _host.Edit += new EditDelegate(EditEvent);
    _host.Maximize += new MaximizeDelegate(delegate() { Visible = true; });
    _host.Minimize += new MinimizeDelegate(delegate() { Visible = false; });
    _host.Create += new CreateDelegate(delegate() { EditEvent(""); });
}

これにより、ウィジェットを標準の.NETコントロールとして使用できるようになり、必要に応じて動的にページに追加できます。

これらをページビルダーUIでロードし続ける理由がない限り、これが私がとるルートです。

于 2012-09-26T13:58:07.790 に答える