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" />