2013-01-17 62 views
4

我正在Ektron 8.6中工作。Ektron中的FormBlock服務器控件

我在我的模板頁面中有一個FormBlock服務器控件,它有一個來自工作區的有效HTML表單的DefualutFormID。工作區中的表單已經沒有幾個表單字段及其相應的值。

雖然模板頁面呈現,我需要獲取這些表單域值,並重新設置它們與其他值。

在哪頁PageCycle事件我應該這樣編碼?

我在預渲染事件中試過這段代碼,但我無法獲取那裏的值,但我可以設置一個值。

我嘗試了SaveStateComplete事件,沒有運氣。

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

If(s=」some text」) 

{ 

// Re-set as some other vale. 

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

} 

在哪個事件中我可以寫這段代碼?

回答

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; 

所以基本上,我用單個根元素包裝HTML,以便它變成有效的XML。 Ektron對於要求內容是XHTML非常好,所以這個應該工作。當然,在生產中使用它之前,應該用更復雜的形式對其進行測試。我還推薦一個健康的防禦性編程 - 空值檢查,try/catch等。

將它解析爲XML後,可以通過獲取value屬性來獲取表單字段的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" />