protected void Button_Click(object sender, EventArgs e) { if (!WebUtil.CheckPrivilege(WebConfig.FunctionGameMasterGMCommand, OpType.EXECUTE, Session)) { Response.Redirect(WebConfig.PageNotEnoughPrivilege, true); } Button lb = sender as Button; if (lb != null) { string gmCmd = string.Empty; string playerName = string.Empty; bool isAccountName = false; bool isExecutedByGameServer = false; int templateIndex = int.Parse(lb.CommandName); GMCommandTemplate template = templateList[templateIndex]; gmCmd = template.cmd; if (template.PlayerNameTextBox != null) { playerName = template.PlayerNameTextBox.Text.Trim(); } isAccountName = template.isAccountName; if (playerName != String.Empty) { isExecutedByGameServer = true; } //只有存在参数时才需要进行对占位符的替换 if (template.ControlList.Count > 0) { string[] arguments = new string[template.ControlList.Count]; for (int i = 0; i < template.ControlList.Count; i++) { Type t = template.ControlList[i].GetType(); if (t == typeof(TextBox)) { arguments[i] = ((TextBox)(template.ControlList[i])).Text.Trim(); arguments[i] = arguments[i].Replace("\r\n", "\\r\\n"); } else if (t == typeof(DropDownList)) { DropDownList dropDownList = (DropDownList)template.ControlList[i]; if (dropDownList.SelectedIndex != -1) { arguments[i] = dropDownList.SelectedValue; } } } gmCmd = string.Format(gmCmd, arguments); } ArrayList serversToGetResultArrayList = new ArrayList(); try { if (serverGroupSelectionOptionRadioButtonList.SelectedValue == "DropDownList") { int serverId = serverGroupDropDownList.SelectedServer.Id; if (GMUtil.ExeGMCommand(CurrentUser.Id, serverId, playerName, isAccountName, gmCmd, isExecutedByGameServer, null, true)) { LabelOpMsg.Text = "GM指令发送成功"; serversToGetResultArrayList.Add(AdminServer.TheInstance.GameServerManager.GetGameServer(serverId)); } else { LabelOpMsg.Text = "GM指令发送失败"; return; } } else if (serverGroupSelectionOptionRadioButtonList.SelectedValue == "TreeView") { LabelOpMsg.Text = String.Empty; int totalTargetServer = 0; int successCount = 0; foreach (TreeNode checkedTreeNode in TreeViewServerGroup.CheckedNodes) { try { if (checkedTreeNode.Value.StartsWith("g")) { ServerGroup serverGroup = TheAdminServer.GameServerManager.GetGameServerGroup(int.Parse(checkedTreeNode.Value.Substring(1))); GameServer gameCenter = null; foreach (GameServer gameServer in serverGroup.List) { if (gameServer.Type == GameServer.ServerType.gamecenter) { gameCenter = gameServer; break; } } if (gameCenter != null) { totalTargetServer++; if (GMUtil.ExeGMCommand(CurrentUser.Id, gameCenter.Id, playerName, isAccountName, gmCmd, isExecutedByGameServer, null, true)) { serversToGetResultArrayList.Add(gameCenter); successCount++; } } } } catch (Exception exception) { Util.DebugLog(exception.ToString()); } } LabelOpMsg.Text = "发送指令: " + successCount.ToString() + "/" + totalTargetServer.ToString(); } } catch (Exception ex) { Util.DebugLog(ex.ToString()); } finally { LabelOpMsg.Visible = true; LabelResultReceivedMsg.Visible = false; if (serversToGetResultArrayList.Count != 0) { Session["ServersToGetResult"] = serversToGetResultArrayList; Session["ServersToGetResultTotalCount"] = serversToGetResultArrayList.Count; Session["ResultReceivedCount"] = 0; ((HtmlTextArea)(resultMessagePanel.FindControl("resultMessageTextArea"))).Value = string.Empty; if (ShowGMCommandResultTimer.Enabled == false) { ShowGMCommandResultTimer.Enabled = true; } } } } }
private void LoadGMCommandTemplate() { int textBoxCount = 100; int validatorCount = 100; TableCell templateTableCell = this.TemplateTable.FindControl("TemplateTableCell") as TableCell; XPathNavigator nav; XPathDocument docNav; docNav = new XPathDocument(WebConfig.WebsiteRootPath + "GMCommandTemplate.xml"); nav = docNav.CreateNavigator(); nav.MoveToRoot(); nav.MoveToFirstChild(); while (nav.NodeType != XPathNodeType.Element) { nav.MoveToNext(); } if (nav.LocalName != "GMCommandTemplates") { throw new Exception("根结点必须为<GMCommandTemplates>"); } if (nav.HasChildren) { nav.MoveToFirstChild(); } else { throw new Exception("<GMCommandTemplates>下必须有子结点"); } do { if (nav.NodeType == XPathNodeType.Element) { if (nav.LocalName != "Template") { throw new Exception("<GMCommandTemplates>下的子结点只允许为<Template>"); } if (nav.HasChildren) { nav.MoveToFirstChild(); GMCommandTemplate template = new GMCommandTemplate(); Panel panel = new Panel(); Table table = new Table(); string templateName = String.Empty; string cmd = String.Empty; Label desLabel = new Label(); panel.Controls.Add(desLabel); do { if (nav.LocalName == "TemplateName") { templateName = nav.Value; if (IsPostBack == false) { ListBoxOperation.Items.Add(new ListItem(templateName)); } } else if (nav.LocalName == "Executer") { if ((nav.Value == "Role") || (nav.Value == "Account")) { TableRow row = new TableRow(); row.HorizontalAlign = HorizontalAlign.Center; TableCell[] cell = new TableCell[2]; for (int i = 0; i < 2; i++) { cell[i] = new TableCell(); } cell[0].Width = new Unit(20f, UnitType.Percentage); cell[0].Style.Value = "text-align: center;font-weight: bold;color: #FFFFFF;background-color: #5099B3;height: 20px;border-bottom: solid 1px #808080;border-right: solid 1px #808080;"; //Role和Account唯一不同的地方 if (nav.Value == "Role") { cell[0].Text = "角色名"; template.isAccountName = false; } else { cell[0].Text = "账号名"; template.isAccountName = true; } cell[1].Width = new Unit(80f, UnitType.Percentage); TextBox textBox = new TextBox(); textBox.ID = "textBox" + textBoxCount.ToString(); textBoxCount++; cell[1].Controls.Add(textBox); template.PlayerNameTextBox = textBox; //必须有输入,RequiredFieldValidator RequiredFieldValidator validator = new RequiredFieldValidator(); validator.ID = "validator" + validatorCount.ToString(); validatorCount++; validator.ControlToValidate = textBox.ID; validator.Display = ValidatorDisplay.None; validator.ErrorMessage = StringDef.RequiredFieldValidatorErrorMsg; validator.SetFocusOnError = true; cell[1].Controls.Add(validator); AjaxControlToolkit.ValidatorCalloutExtender validatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); validatorExtender.TargetControlID = validator.ID; cell[1].Controls.Add(validatorExtender); row.Cells.AddRange(cell); table.Rows.Add(row); } else if (nav.Value == "GameCenter") { //不生成任何控件,什么也不做,只是保证"GameCenter"为合法的值 } else { throw new Exception("<Executer>的值" + nav.Value + "不合法,合法的值为Role,Account或GameCenter"); } } else if (nav.LocalName == "TemplateCMD") { cmd = nav.Value; } else if (nav.LocalName == "Description") { desLabel.Text = nav.Value + "<br /> "; } else if (nav.LocalName == "Parameter") { if (nav.HasChildren) { nav.MoveToFirstChild(); if (nav.LocalName == "Name") { TableRow row = new TableRow(); row.HorizontalAlign = HorizontalAlign.Center; TableCell[] cell = new TableCell[2]; for (int i = 0; i < 2; i++) { cell[i] = new TableCell(); } cell[0].Width = new Unit(20f, UnitType.Percentage); cell[0].Style.Value = "text-align: center;font-weight: bold;color: #FFFFFF;background-color: #5099B3;height: 20px;border-bottom: solid 1px #808080;border-right: solid 1px #808080;"; cell[0].Text = nav.Value; cell[1].Width = new Unit(80f, UnitType.Percentage); if (nav.MoveToNext()) { if (nav.LocalName == "Control") { if (nav.HasChildren) { nav.MoveToFirstChild(); if (nav.LocalName == "Type") { switch (nav.Value) { case "TextBox": TextBox textBox = new TextBox(); textBox.ID = "textBox" + textBoxCount.ToString(); textBoxCount++; cell[1].Controls.Add(textBox); template.ControlList.Add(textBox); //必须有输入,RequiredFieldValidator RequiredFieldValidator validator = new RequiredFieldValidator(); validator.ID = "validator" + validatorCount.ToString(); validatorCount++; validator.ControlToValidate = textBox.ID; validator.Display = ValidatorDisplay.None; validator.ErrorMessage = StringDef.RequiredFieldValidatorErrorMsg; validator.SetFocusOnError = true; cell[1].Controls.Add(validator); AjaxControlToolkit.ValidatorCalloutExtender validatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); validatorExtender.TargetControlID = validator.ID; cell[1].Controls.Add(validatorExtender); //TextBox类型可能有的其他特性定义 while (nav.MoveToNext()) { if (nav.LocalName == "MultiLine") { if (nav.Value == "True") { textBox.TextMode = TextBoxMode.MultiLine; textBox.Wrap = true; } } else if (nav.LocalName == "MaxCharCount") { if (textBox.TextMode == TextBoxMode.MultiLine) { textBox.Attributes.Add("onkeypress", "return validateMaxLength(this, " + nav.Value + ");"); textBox.Attributes.Add("onbeforepaste", "doBeforePaste(this, " + nav.Value + ");"); textBox.Attributes.Add("onpaste", "doPaste(this, " + nav.Value + ");"); } else { textBox.MaxLength = int.Parse(nav.Value); } } else if (nav.LocalName == "Style") { textBox.Style.Value = nav.Value; } } break; case "IntegerTextBox": TextBox integerTextBox = new TextBox(); integerTextBox.ID = "textBox" + textBoxCount.ToString(); textBoxCount++; cell[1].Controls.Add(integerTextBox); template.ControlList.Add(integerTextBox); //必须有输入,RequiredFieldValidator RequiredFieldValidator integerValidator = new RequiredFieldValidator(); integerValidator.ID = "validator" + validatorCount.ToString(); validatorCount++; integerValidator.ControlToValidate = integerTextBox.ID; integerValidator.Display = ValidatorDisplay.None; integerValidator.ErrorMessage = StringDef.RequiredFieldValidatorErrorMsg; integerValidator.SetFocusOnError = true; cell[1].Controls.Add(integerValidator); AjaxControlToolkit.ValidatorCalloutExtender integerValidatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); integerValidatorExtender.TargetControlID = integerValidator.ID; cell[1].Controls.Add(integerValidatorExtender); //IntegerTextBox类型,用CompareValidator限定只能输入整数, CompareValidator compareValidator = new CompareValidator(); compareValidator.ID = "validator" + validatorCount.ToString(); validatorCount++; compareValidator.ControlToValidate = integerTextBox.ID; compareValidator.Display = ValidatorDisplay.None; compareValidator.ErrorMessage = "必须填写整数"; compareValidator.SetFocusOnError = true; compareValidator.Operator = ValidationCompareOperator.DataTypeCheck; compareValidator.Type = ValidationDataType.Integer; cell[1].Controls.Add(compareValidator); AjaxControlToolkit.ValidatorCalloutExtender compareValidatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); compareValidatorExtender.TargetControlID = compareValidator.ID; cell[1].Controls.Add(compareValidatorExtender); //IntegerTextBox类型可能有的其他特性定义 while (nav.MoveToNext()) { //用CompareValidator限定值必须大于等于MinValue if (nav.LocalName == "MinValue") { string minValue = nav.Value; CompareValidator minValidator = new CompareValidator(); minValidator.ID = "validator" + validatorCount.ToString(); validatorCount++; minValidator.ControlToValidate = integerTextBox.ID; minValidator.Display = ValidatorDisplay.None; minValidator.ErrorMessage = "输入的值必须大于等于" + minValue; minValidator.SetFocusOnError = true; minValidator.Operator = ValidationCompareOperator.GreaterThanEqual; minValidator.Type = ValidationDataType.Integer; minValidator.ValueToCompare = minValue; cell[1].Controls.Add(minValidator); AjaxControlToolkit.ValidatorCalloutExtender minValidatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); minValidatorExtender.TargetControlID = minValidator.ID; cell[1].Controls.Add(minValidatorExtender); } //用CompareValidator限定值必须小于等于MaxValue else if (nav.LocalName == "MaxValue") { string maxValue = nav.Value; CompareValidator maxValidator = new CompareValidator(); maxValidator.ID = "validator" + validatorCount.ToString(); validatorCount++; maxValidator.ControlToValidate = integerTextBox.ID; maxValidator.Display = ValidatorDisplay.None; maxValidator.ErrorMessage = "输入的值必须小于等于" + maxValue; maxValidator.SetFocusOnError = true; maxValidator.Operator = ValidationCompareOperator.LessThanEqual; maxValidator.Type = ValidationDataType.Integer; maxValidator.ValueToCompare = maxValue; cell[1].Controls.Add(maxValidator); AjaxControlToolkit.ValidatorCalloutExtender maxValidatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); maxValidatorExtender.TargetControlID = maxValidator.ID; cell[1].Controls.Add(maxValidatorExtender); } else if (nav.LocalName == "Style") { integerTextBox.Style.Value = nav.Value; } } break; case "DropDownList": DropDownList dropDownList = new DropDownList(); cell[1].Controls.Add(dropDownList); template.ControlList.Add(dropDownList); while (nav.MoveToNext()) { if (nav.LocalName == "Style") { dropDownList.Style.Value = nav.Value; } //添加dropDownList具有的Item else if (nav.LocalName == "Item") { if (nav.HasChildren) { nav.MoveToFirstChild(); ListItem item = new ListItem(); do { if (nav.LocalName == "Text") { item.Text = nav.Value; } else if (nav.LocalName == "Value") { item.Value = nav.Value; } }while (nav.MoveToNext()); if ((item.Text != String.Empty) && (item.Value != String.Empty)) { dropDownList.Items.Add(item); } nav.MoveToParent(); } } } break; default: throw new Exception("<Type>的值" + nav.Value + "不合法,合法的值为TextBox,IntegerTextBox或DropDownList"); } } nav.MoveToParent(); } else { throw new Exception("<Control>下必须有子结点"); } } else { throw new Exception("<Name>后的结点只能为<Control>"); } } else { throw new Exception("<Parameter>下不能只有<Name>结点"); } row.Cells.AddRange(cell); table.Rows.Add(row); } else { throw new Exception("<Parameter>下的第一个结点必须为<Name>"); } nav.MoveToParent(); } else { throw new Exception("<Parameter>下必须有子结点"); } } else { throw new Exception("结点<" + nav.LocalName + ">不合法"); } }while (nav.MoveToNext()); panel.Controls.Add(table); Button button = new Button(); button.Text = templateName; button.CommandName = templateList.Count.ToString(); button.Click += new EventHandler(Button_Click); button.OnClientClick = "if (Page_ClientValidate()){return window.confirm('确认执行GM指令吗?');}"; panel.Controls.Add(button); templateTableCell.Controls.Add(panel); template.TemplatePanel = panel; template.cmd = cmd; templateList.Add(template); nav.MoveToParent(); } else { throw new Exception("<Template>下必须有子结点"); } } }while (nav.MoveToNext()); if (IsPostBack == false) { ListBoxOperation.SelectedIndex = 0; } SetPanelVisible(); }
private void LoadGMCommandTemplate() { int textBoxCount = 100; int validatorCount = 100; TableCell templateTableCell = this.TemplateTable.FindControl("TemplateTableCell") as TableCell; XPathNavigator nav; XPathDocument docNav; docNav = new XPathDocument(WebConfig.WebsiteRootPath + "GMCommandTemplate.xml"); nav = docNav.CreateNavigator(); nav.MoveToRoot(); nav.MoveToFirstChild(); while (nav.NodeType != XPathNodeType.Element) nav.MoveToNext(); if (nav.LocalName != "GMCommandTemplates") throw new Exception("根结点必须为<GMCommandTemplates>"); if (nav.HasChildren) nav.MoveToFirstChild(); else throw new Exception("<GMCommandTemplates>下必须有子结点"); do { if (nav.NodeType == XPathNodeType.Element) { if (nav.LocalName != "Template") throw new Exception("<GMCommandTemplates>下的子结点只允许为<Template>"); if (nav.HasChildren) { nav.MoveToFirstChild(); GMCommandTemplate template = new GMCommandTemplate(); Panel panel = new Panel(); Table table = new Table(); string templateName = String.Empty; string cmd = String.Empty; Label desLabel = new Label(); panel.Controls.Add(desLabel); do { if (nav.LocalName == "TemplateName") { templateName = nav.Value; if (IsPostBack == false) ListBoxOperation.Items.Add(new ListItem(templateName)); } else if (nav.LocalName == "Executer") { if ((nav.Value == "Role") || (nav.Value == "Account")) { TableRow row = new TableRow(); row.HorizontalAlign = HorizontalAlign.Center; TableCell[] cell = new TableCell[2]; for (int i = 0; i < 2; i++) cell[i] = new TableCell(); cell[0].Width = new Unit(20f, UnitType.Percentage); cell[0].Style.Value = "text-align: center;font-weight: bold;color: #FFFFFF;background-color: #5099B3;height: 20px;border-bottom: solid 1px #808080;border-right: solid 1px #808080;"; //Role和Account唯一不同的地方 if (nav.Value == "Role") { cell[0].Text = "角色名"; template.isAccountName = false; } else { cell[0].Text = "账号名"; template.isAccountName = true; } cell[1].Width = new Unit(80f, UnitType.Percentage); TextBox textBox = new TextBox(); textBox.ID = "textBox" + textBoxCount.ToString(); textBoxCount++; cell[1].Controls.Add(textBox); template.PlayerNameTextBox = textBox; //必须有输入,RequiredFieldValidator RequiredFieldValidator validator = new RequiredFieldValidator(); validator.ID = "validator" + validatorCount.ToString(); validatorCount++; validator.ControlToValidate = textBox.ID; validator.Display = ValidatorDisplay.None; validator.ErrorMessage = StringDef.RequiredFieldValidatorErrorMsg; validator.SetFocusOnError = true; cell[1].Controls.Add(validator); AjaxControlToolkit.ValidatorCalloutExtender validatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); validatorExtender.TargetControlID = validator.ID; cell[1].Controls.Add(validatorExtender); row.Cells.AddRange(cell); table.Rows.Add(row); } else if (nav.Value == "GameCenter") { //不生成任何控件,什么也不做,只是保证"GameCenter"为合法的值 } else throw new Exception("<Executer>的值" + nav.Value + "不合法,合法的值为Role,Account或GameCenter"); } else if (nav.LocalName == "TemplateCMD") { cmd = nav.Value; } else if (nav.LocalName == "Description") { desLabel.Text = nav.Value + "<br /> "; } else if (nav.LocalName == "Parameter") { if (nav.HasChildren) { nav.MoveToFirstChild(); if (nav.LocalName == "Name") { TableRow row = new TableRow(); row.HorizontalAlign = HorizontalAlign.Center; TableCell[] cell = new TableCell[2]; for (int i = 0; i < 2; i++) cell[i] = new TableCell(); cell[0].Width = new Unit(20f, UnitType.Percentage); cell[0].Style.Value = "text-align: center;font-weight: bold;color: #FFFFFF;background-color: #5099B3;height: 20px;border-bottom: solid 1px #808080;border-right: solid 1px #808080;"; cell[0].Text = nav.Value; cell[1].Width = new Unit(80f, UnitType.Percentage); if (nav.MoveToNext()) { if (nav.LocalName == "Control") { if (nav.HasChildren) { nav.MoveToFirstChild(); if (nav.LocalName == "Type") { switch (nav.Value) { case "TextBox": TextBox textBox = new TextBox(); textBox.ID = "textBox" + textBoxCount.ToString(); textBoxCount++; cell[1].Controls.Add(textBox); template.ControlList.Add(textBox); //必须有输入,RequiredFieldValidator RequiredFieldValidator validator = new RequiredFieldValidator(); validator.ID = "validator" + validatorCount.ToString(); validatorCount++; validator.ControlToValidate = textBox.ID; validator.Display = ValidatorDisplay.None; validator.ErrorMessage = StringDef.RequiredFieldValidatorErrorMsg; validator.SetFocusOnError = true; cell[1].Controls.Add(validator); AjaxControlToolkit.ValidatorCalloutExtender validatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); validatorExtender.TargetControlID = validator.ID; cell[1].Controls.Add(validatorExtender); //TextBox类型可能有的其他特性定义 while (nav.MoveToNext()) { if (nav.LocalName == "MultiLine") { if (nav.Value == "True") { textBox.TextMode = TextBoxMode.MultiLine; textBox.Wrap = true; } } else if (nav.LocalName == "MaxCharCount") { if (textBox.TextMode == TextBoxMode.MultiLine) { textBox.Attributes.Add("onkeypress", "return validateMaxLength(this, " + nav.Value + ");"); textBox.Attributes.Add("onbeforepaste", "doBeforePaste(this, " + nav.Value + ");"); textBox.Attributes.Add("onpaste", "doPaste(this, " + nav.Value + ");"); } else textBox.MaxLength = int.Parse(nav.Value); } else if (nav.LocalName == "Style") textBox.Style.Value = nav.Value; } break; case "IntegerTextBox": TextBox integerTextBox = new TextBox(); integerTextBox.ID = "textBox" + textBoxCount.ToString(); textBoxCount++; cell[1].Controls.Add(integerTextBox); template.ControlList.Add(integerTextBox); //必须有输入,RequiredFieldValidator RequiredFieldValidator integerValidator = new RequiredFieldValidator(); integerValidator.ID = "validator" + validatorCount.ToString(); validatorCount++; integerValidator.ControlToValidate = integerTextBox.ID; integerValidator.Display = ValidatorDisplay.None; integerValidator.ErrorMessage = StringDef.RequiredFieldValidatorErrorMsg; integerValidator.SetFocusOnError = true; cell[1].Controls.Add(integerValidator); AjaxControlToolkit.ValidatorCalloutExtender integerValidatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); integerValidatorExtender.TargetControlID = integerValidator.ID; cell[1].Controls.Add(integerValidatorExtender); //IntegerTextBox类型,用CompareValidator限定只能输入整数, CompareValidator compareValidator = new CompareValidator(); compareValidator.ID = "validator" + validatorCount.ToString(); validatorCount++; compareValidator.ControlToValidate = integerTextBox.ID; compareValidator.Display = ValidatorDisplay.None; compareValidator.ErrorMessage = "必须填写整数"; compareValidator.SetFocusOnError = true; compareValidator.Operator = ValidationCompareOperator.DataTypeCheck; compareValidator.Type = ValidationDataType.Integer; cell[1].Controls.Add(compareValidator); AjaxControlToolkit.ValidatorCalloutExtender compareValidatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); compareValidatorExtender.TargetControlID = compareValidator.ID; cell[1].Controls.Add(compareValidatorExtender); //IntegerTextBox类型可能有的其他特性定义 while (nav.MoveToNext()) { //用CompareValidator限定值必须大于等于MinValue if (nav.LocalName == "MinValue") { string minValue = nav.Value; CompareValidator minValidator = new CompareValidator(); minValidator.ID = "validator" + validatorCount.ToString(); validatorCount++; minValidator.ControlToValidate = integerTextBox.ID; minValidator.Display = ValidatorDisplay.None; minValidator.ErrorMessage = "输入的值必须大于等于" + minValue; minValidator.SetFocusOnError = true; minValidator.Operator = ValidationCompareOperator.GreaterThanEqual; minValidator.Type = ValidationDataType.Integer; minValidator.ValueToCompare = minValue; cell[1].Controls.Add(minValidator); AjaxControlToolkit.ValidatorCalloutExtender minValidatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); minValidatorExtender.TargetControlID = minValidator.ID; cell[1].Controls.Add(minValidatorExtender); } //用CompareValidator限定值必须小于等于MaxValue else if (nav.LocalName == "MaxValue") { string maxValue = nav.Value; CompareValidator maxValidator = new CompareValidator(); maxValidator.ID = "validator" + validatorCount.ToString(); validatorCount++; maxValidator.ControlToValidate = integerTextBox.ID; maxValidator.Display = ValidatorDisplay.None; maxValidator.ErrorMessage = "输入的值必须小于等于" + maxValue; maxValidator.SetFocusOnError = true; maxValidator.Operator = ValidationCompareOperator.LessThanEqual; maxValidator.Type = ValidationDataType.Integer; maxValidator.ValueToCompare = maxValue; cell[1].Controls.Add(maxValidator); AjaxControlToolkit.ValidatorCalloutExtender maxValidatorExtender = new AjaxControlToolkit.ValidatorCalloutExtender(); maxValidatorExtender.TargetControlID = maxValidator.ID; cell[1].Controls.Add(maxValidatorExtender); } else if (nav.LocalName == "Style") integerTextBox.Style.Value = nav.Value; } break; case "DropDownList": DropDownList dropDownList = new DropDownList(); cell[1].Controls.Add(dropDownList); template.ControlList.Add(dropDownList); while (nav.MoveToNext()) { if (nav.LocalName == "Style") dropDownList.Style.Value = nav.Value; //添加dropDownList具有的Item else if (nav.LocalName == "Item") { if (nav.HasChildren) { nav.MoveToFirstChild(); ListItem item = new ListItem(); do { if (nav.LocalName == "Text") item.Text = nav.Value; else if (nav.LocalName == "Value") item.Value = nav.Value; } while (nav.MoveToNext()); if ((item.Text != String.Empty) && (item.Value != String.Empty)) dropDownList.Items.Add(item); nav.MoveToParent(); } } } break; default: throw new Exception("<Type>的值" + nav.Value + "不合法,合法的值为TextBox,IntegerTextBox或DropDownList"); } } nav.MoveToParent(); } else throw new Exception("<Control>下必须有子结点"); } else throw new Exception("<Name>后的结点只能为<Control>"); } else throw new Exception("<Parameter>下不能只有<Name>结点"); row.Cells.AddRange(cell); table.Rows.Add(row); } else throw new Exception("<Parameter>下的第一个结点必须为<Name>"); nav.MoveToParent(); } else throw new Exception("<Parameter>下必须有子结点"); } else throw new Exception("结点<" + nav.LocalName + ">不合法"); } while (nav.MoveToNext()); panel.Controls.Add(table); Button button = new Button(); button.Text = templateName; button.CommandName = templateList.Count.ToString(); button.Click += new EventHandler(Button_Click); button.OnClientClick = "if (Page_ClientValidate()){return window.confirm('确认执行GM指令吗?');}"; panel.Controls.Add(button); templateTableCell.Controls.Add(panel); template.TemplatePanel = panel; template.cmd = cmd; templateList.Add(template); nav.MoveToParent(); } else throw new Exception("<Template>下必须有子结点"); } } while (nav.MoveToNext()); if (IsPostBack == false) ListBoxOperation.SelectedIndex = 0; SetPanelVisible(); }