4

私は Ektron 8.6 で作業しています。

テンプレート ページに FormBlock サーバー コントロールがあり、ワークエリアからの有効な HTML フォームの DefualutFormID を持っています。ワークエリアのフォームには、いくつかのフォーム フィールドとそれに対応する値があります。

テンプレート ページのレンダリング中に、これらのフォーム フィールドの値を取得し、他の値で再設定する必要があります。

どの Page –Cycle イベントでこのコーディングを行う必要がありますか?

Pre-Render Event でこのコードを試しましたが、そこで値を取得することはできませんが、値を設定することはできます。

SaveStateComplete イベントも試しましたが、うまくいきませんでした。

String s=FormBlock1.Fields["FirstName"].Value;

If(s=”some text”)

{

// Re-set as some other vale.

FormBlock1.Fields["FirstName"].Value=”Some other value”;

}

このコードを書くことができるイベントはどれですか?

4

1 に答える 1

1

Page_Load は、フォーム フィールドの値を変更する場合にうまく機能します。デフォルトの動作は、Ektron サーバー コントロールが Page_Init 中にデータをロードすることです。

本当の問題は、デフォルト値を取得する方法です。Ektron フォーム (具体的には、フィールドのデフォルト値) を定義するデータを取得するために、あらゆる方法を試しました。認めますが、これはちょっとしたハックですが、うまくいきます。

var xml = XElement.Parse("<ekForm>" + cmsFormBlock.EkItem.Html + "</ekForm>");
var inputField = xml.Descendants("input").FirstOrDefault(i => i.Attribute("id").Value == "SampleTextField");
string defaultValue = inputField.Attribute("value").Value;
if (defaultValue == "The default value for this field is 42")
{
    // do stuff here...
}

私の FormBlock サーバー コントロールは ASPX 側で定義されています。

<CMS:FormBlock runat="server" ID="cmsFormBlock" DynamicParameter="ekfrm"/>

もちろん、XElement には次の using ステートメントが必要です。

using System.Xml.Linq;

したがって、基本的には、有効な XML になるように HTML を単一のルート要素でラップします。Ektron は、コンテンツを XHTML にすることを要求する点で優れているため、これは機能するはずです。当然、これを本番環境で使用する前に、より複雑な形式でテストする必要があります。また、null チェック、try/catch などの防御的プログラミングを適切に行うことをお勧めします。

XML として解析されると、属性を取得することでフォーム フィールドの値プロパティを取得できvalueます。私が設定したサンプル フォームの場合、フォームの HTML (EkItem.Html) の一部は次のとおりです。

<input type="text" value="The default value for this field is 42" class="design_textfield" size="24" title="Sample Text Field" ektdesignns_name="SampleTextField" ektdesignns_caption="Sample Text Field" id="SampleTextField" ektdesignns_nodetype="element" name="SampleTextField" />
于 2013-07-08T21:39:13.710 に答える