2013-01-17 3 views
4

저는 Ektron 8.6에서 일하고 있습니다.Ektron의 FormBlock 서버 컨트롤

템플릿 페이지에 FormBlock 서버 컨트롤이 있습니다.이 템플릿은 workarea에서 유효한 HTML 폼의 DefualutFormID를 갖습니다. 작업 영역의 양식에는 양식 필드와 해당 값이 거의 없습니다.

템플릿 페이지가 렌더링되는 동안 해당 양식 필드 값을 가져 와서 다른 값으로 다시 설정해야합니다.

페이지에서 -이 이벤트를 코딩해야합니까?

사전 렌더링 이벤트에서이 코드를 시도했지만 값을 가져올 수 없지만 값을 설정할 수 있습니다.

행운을 빕니다 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

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 측에 정의, 아무것도 : 그래서, 기본적으로

using System.Xml.Linq; 

:

<CMS:FormBlock runat="server" ID="cmsFormBlock" DynamicParameter="ekfrm"/> 

그리고, 물론, XElement를 다음과 같은 사용하여 문을 필요로하지 않는다 단일 루트 요소로 HTML을 래핑하여 유효한 XML이되도록합니다. Ektron은 콘텐츠가 XHTML 일 필요가 있음을 잘 알고 있으므로이 이어야합니다. 당연히 이것은 이것을 프로덕션 환경에서 사용하기 전에보다 복잡한 형식으로 테스트해야합니다. 또한, 수표 프로그래밍, 체력 검사, 시도/잡기 등의 수비 프로그래밍을 권장합니다.

XML로 구문 분석 된 후 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" />