ASP.NET 서버 컨트롤 내에서 만들어진 HiddenField 컨트롤이 있습니다. ValueChanged 이벤트에 대한 새 EventHandler를 추가했습니다.HiddenField EventHandler Javascript를 통해 변경 될 때 ValueChanged가 실행되지 않음
내 HiddenField 값이 자바 스크립트 함수 내에서 변경되면이 이벤트가 발생합니까?
내가 겪고있는 주된 문제는 값이 변경되었거나 적어도 다시 게시되기 전에 내 HiddenField 서버 측 값을 검색하려고하는 것입니다. 내가 그 페이지가 포스트 백을 일으키는 버튼을 포함하고 처음에 SaveControlState/LoadControlState를 사용하여 시도한 페이지 내에서 서버 컨트롤을 가지고 있지만 포스트 백이 발생하기 전에 SaveControlState가 호출되지 않은 이유가 있습니다. ValueChanged 이벤트 내에서 또는 다시 게시하기 전에 값을 캡처 할 수 있어야합니다. - 초기로드시 또는 다시 게시 중 하나 컨트롤을 렌더링 된 페이지 통화 중
public class ObjectTree : WebControl {
private CA.TreeView _treeView;
private HiddenField fldCheckedNodes = new HiddenField();
public CA.TreeView TreeView {
get { return _treeView; }
set { _treeView = value; }
}
public ObjectTree() {
_treeView = new CA.TreeView();
_treeView.ID = "objectTree";
fldCheckedNodes.ID = "fldCheckedNodes";
}
protected void fldCheckedNodes_ValueChanged(Object sender, EventArgs e) {
string test = fldCheckedNodes.Value;
}
protected override void OnPreRender(EventArgs e) {
TreeView.ClientSideOnNodeCheckChanged = TreeView.ClientID + "NodeChecked";
fldCheckedNodes.ValueChanged += new EventHandler(fldCheckedNodes_ValueChanged);
if (!Page.ClientScript.IsClientScriptBlockRegistered("jscript")) {
StringBuilder jscript = new StringBuilder();
jscript.AppendLine(" function " + TreeView.ClientID + "UpdateCheckedNodes() {");
jscript.AppendLine(" var x = 0;");
jscript.AppendLine(" var nodeArray = " + TreeView.ClientID + ".get_nodes().get_nodeArray();");
jscript.AppendLine(" var nodeLength = nodeArray.length;");
jscript.AppendLine(" document.getElementById('" + fldCheckedNodes.ClientID + "').value = \"\";");
jscript.AppendLine(" for (x=0; x < nodeLength; x++) {");
jscript.AppendLine(" examineNode(nodeArray[x]);");
jscript.AppendLine(" }");
jscript.AppendLine(" var result = document.getElementById('" + fldCheckedNodes.ClientID + "').value;");
jscript.AppendLine(" return true;");
jscript.AppendLine(" }");
jscript.AppendLine(" function examineNode(node) {");
jscript.AppendLine(" var y = 0;");
jscript.AppendLine(" var childNodes = node.get_nodes().get_nodeArray();");
jscript.AppendLine(" var childNodeLength = childNodes.length;");
jscript.AppendLine(" if (node.get_checked()) {");
jscript.AppendLine(" if (document.getElementById('" + fldCheckedNodes.ClientID + "').value.length > 0) {");
jscript.AppendLine(" document.getElementById('" + fldCheckedNodes.ClientID + "').value += \",\"; ");
jscript.AppendLine(" document.getElementById('" + fldCheckedNodes.ClientID + "').value += node.get_id();");
jscript.AppendLine(" } else {");
jscript.AppendLine(" document.getElementById('" + fldCheckedNodes.ClientID + "').value += node.get_id();");
jscript.AppendLine(" }");
jscript.AppendLine(" }");
jscript.AppendLine(" if (childNodeLength >= 1) {");
jscript.AppendLine(" for (y=0; y < childNodeLength; y++) {");
jscript.AppendLine(" examineNode(childNodes[y]);");
jscript.AppendLine(" }");
jscript.AppendLine(" } ");
jscript.AppendLine(" }");
jscript.AppendLine("</script>");
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "jscript", jscript.ToString());
}
base.OnPreRender(e);
}
protected override void CreateChildControls() {
Controls.Add(TreeView);
Controls.Add(fldCheckedNodes);
}
protected override void RenderContents(HtmlTextWriter output) {
TreeView.RenderControl(output);
fldCheckedNodes.RenderControl(output);
}
}