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