C#学习教程:如何在动态创建的ASP.net控件中动态创建ASP.net控件我有一个按钮,单击它会生成一些html、一些asp文本框和一个asp按钮(第二个按钮)。据我所知,这很好用。现在我想要的是,当我单击第二个新创建的按钮时,我希望它创建一些html+asp.net文本框。这对我来说似乎有点混乱,有没有更简单的方法来做到这一点?我似乎无法弄清楚,我创建了按钮2的onclick事件,但它尚不存在。太感谢了。认为查看代码可能更容易,以防万一您想知道发生了什么。namespaceConnorMackayWebForm{publicpartialclassInspectionCreate:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){//设置区域和危险的初始数量intareaCount=0;inthazardCount=0;//检查具有面积计数的视图状态是否已经存在if(ViewState["areaCount"]!=null){//将视图状态转换回intareaCount=Convert.ToInt32(ViewState["areaCount"]);}else{ViewState["areaCount"]=areaCount;}//检查带有危险计数的视图状态是否已经存在}else{ViewState["hazardCount"]=hazardCount;}//创建所需数量的区域for(inti=1;i<=areaCount;i++){createArea(i);}//为(inti=1;i<=hazardCount;i++)创建所需数量的危险{createHazard(i);}}保护无效btnCreateArea_Click(objectsender,EventArgse){//获取当前区域个数intareaCount=Convert.ToInt32(ViewState["areaCount"])+1;//创建区域createArea(areaCount);//将新区域设置到viewstateViewState["areaCount"]=areaCount;}protectedvoidbtnCreateHazard_Click(objectsender,CommandEventArgsareaCount){//获取当前区域数inthazardCount=Convert.ToInt32(ViewState["hazardCount"])+1;//从按钮中获取参数intplaceholderID=Convert.ToInt32(areaCount.CommandArgument);//创建危险createHazard(hazardCount,placeholderID);//将新的危险设置到视图状态ViewState["hazardCount"]=hazardCount;}privatevoidcreateArea(intareaCount){//开始生成HTMLpnlArea.Controls.Add(newLiteralControl(""));pnlArea.Controls.Add(newLiteralControl(""));pnlArea.Controls.Add(newLiteralControl("检查区域/设备1:"));//创建标题下拉DropDownListddArea=newDropDownList();ddArea.ID="ddArea"+areaCount;pnlArea.Controls.Add(ddArea);//在标题中创建Other文本框pnlArea.Controls.Add(newLiteralControl("Other:"));TextBoxtxtOther=newTextBox();txtOther.ID="txtOther"+areaCount;pnlArea.Controls.Add(txtOther);//为框体和第一列的开头生成HTMLpnlArea.Controls.Add(newLiteralControl(""));pnlArea.Controls.Add(newLiteralControl(""));pnlArea.Controls.Add(newLiteralControl(""));pnlArea.Controls.Add(newLiteralControl(""));//Placeholder将未来的危险放入PlaceHolderphHazard=newPlaceHolder();phHazard.ID="phHazard"+areaCount;pnlArea.Controls.Add(phHazard);//创建危险按钮pnlArea.Controls.Add(newLiteralControl(""));按钮btnCreateHazard=newButton();//btnCreateHazard.Click+=btnCreateHazard_Click;btnCreateHazard.ID="btnCreateHazard"+areaCount;btnCreateHazard.Text="创建Hazard";btnCreateHazard.CssClass="form-control";//传递当前区域计数,允许onclick拾取它,将它传递给//createhazard方法。然后该方法将接受参数并搜索aplace//holderwithmatchingIDandassignthecontrolstothatplaceholder.btnCreateHazard.Command+=btnCreateHazard_Click;btnCreateHazard.CommandArgument=areaCount.ToString();pnlArea.Controls.Add(btnCreateHazard);pnlArea.Controls.Add(newLiteralControl)复制代码(""));pnlArea.Controls.Add(newLiteralControl(""));}privatevoidcreateHazard(inthazardCount,intplaceholderID){//HTML行的开始等FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl(""));FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl(""));FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl("Hazard:"));//创建危险下拉列表DropDownListddHazard=newDropDownList();ddHazard.ID="ddHazard"+hazardCount;FindControl("phHazard"+placeholderID).Controls.Add(ddHazard);//HTML结束第一列,开始第二列FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl(""));FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl(""));FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl("危害描述:"));//创建危险描述文本框TextBoxtxtHazardDesc=newTextBox();txtHazardDesc.ID="txtHazardDesc"+hazardCount;FindControl("phHazard"+placeholderID).Controls.Add(txtHazardDesc);//HTML结束第二列,开始第三列FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl(""));FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl(""));FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl("纠正措施截止日期:"));//创建截止日期文本框TextBoxtxtDueDate=newT外框();txtDueDate.ID="txtDueDate"+hazardCount;FindControl("phHazard"+placeholderID).Controls.Add(txtDueDate);//HTML结束第三列,开始第四列FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl(""));FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl(""));FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl("纠正措施说明:"));//创建纠正动作描述文本框TextBoxtxtActionDesc=newTextBox();txtActionDesc.ID="txtActionDesc"+hazardCount;FindControl("phHazard"+placeholderID).Controls.Add(txtActionDesc);//结束行FindControl("phHazard"+placeholderID).Controls.Add(newLiteralControl(""));}}}这是一个不断向页面添加按钮的例子每一个新创建的按钮也可以被添加到页面中另一个按钮。这可以用于所有类型的控件。此外,您必须在每个PostBack上重新创建动态控件,否则它们及其内容将会丢失。protectedvoidPage_Load(objectsender,EventArgse){//设置按钮的初始数量intbuttonCount=1;//检查带有按钮计数的视图状态是否已经存在(=回传);}else{ViewState["buttonCount"]=buttonCount;}//为(inti=1;iUPDATE创建所需数量的按钮你也可以将命令委托给按钮而不是点击,你可以用按钮作为CommandArgument发送这个变量。你将不得不改变创建按钮略微。//将正确的方法添加到按钮button.Command+=DynamicButton_Command;//现在您还可以将参数添加到按钮button.CommandArgument="CreateHazard";您还需要一个不同的方法来处理按钮点击。以上就是C#学习教程:HowtodynamicallycreateASP.netcontrols在动态创建的ASP.net控件中。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——protectedvoidDynamicButton_Command(objectsender,CommandEventArgse){//获取当前按钮个数intbuttonCount=Convert.ToInt32(ViewState["buttonCount"])+1;//创建另一个按钮createButton(buttonCount);//将新按钮计数设置到视图状态ViewState["buttonCount"]=buttonCount;//从按钮字符串中获取命令参数buttonArgument=e.CommandArgument.ToString();}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理会员删除。如需转载请注明出处:
