我在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”;
}
在哪种情况下我可以写这段代码?
答案 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" />