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;

所以基本上,我用单个根元素包装 HTML,使其成为有效的 XML。Ektron 在要求内容为 XHTML 方面做得很好,所以这应该可行。自然,在生产中使用它之前,应该在更复杂的形式上对其进行测试。我还推荐健康剂量的防御性编程——空检查、try/catch 等。

一旦解析为XML,就可以通过获取属性来获取表单字段的valuevalue属性。对于我设置的示例表单,以下是表单 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 回答