Ektron中的FormBlock服务器控件

时间:2013-01-17 14:02:05

标签: ektron

我在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”;

}

在哪种情况下我可以写这段代码?

1 个答案:

答案 0 :(得分: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,因此应该工作。当然,在生产中使用它之前,应该在更复杂的形式上进行测试。我还建议使用健康剂量的防御性编程 - 空检查,尝试/捕获等。

将其解析为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" />