如何在运行时向页面添加 ASP.net 和 HTML 控件

本文关键字:net ASP HTML 控件 添加 运行时 | 更新日期: 2023-09-27 18:30:37

我有一个 ASP.net WebForm。标记如下所示:

<div>
    <input type="text"  id="input" runat="server" value=" " />
    <asp:Button Text="send" OnClick="btnsend_Click" ID="btnsend" runat="server" />
</div>

此 HTML 是在运行时生成的。事件在代码隐藏文件中定义。我需要在运行时添加这些控件。我尝试使用文字控件,但控件的工作方式就像 HTML 控件一样,而不是像 ASP.net 控件。

如何在运行时向页面添加 ASP.net 和 HTML 控件

编辑:

注意:项目类型应为"网站",而不是 Web 应用程序。Web 应用程序不支持按需编译,网站是的,它是。

如果我理解得很清楚,你想从用户那里获取标记,它甚至包含 asp.net 控件和脚本。

如果是这种情况,请按照以下步骤操作:

  1. 创建一个虚拟的 .ascx 控件文件,如包含空内容的 DynamicMarkup.ascx
  2. 将此用户控件添加到要静态显示此控件的页面 (xxxx.aspx),以便将其注册到页面
  <%@ Register src="~/DynamicMarkup.ascx" 
    tagname="DynamicMarkup" tagprefix="MyASP" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
            <asp:PlaceHolder runat="server" 
               ID="DynamicMarkupContainer" ></asp:PlaceHolder>

    </div>
    </form>
</body>
</html>
  1. 将用户输入标记(根据您的条件可以从数据库中获取)写入页面 OnInit 中的 DynamicMarkup.ascx 文件 (xxxx.aspx) 以及此动态标记的创建对象
DynamicMarkup

dynamicMarkup = LoadControl("~/DynamicMarkup.ascx") as 动态标记;

DynamicMarkupContainer.Controls.Add(ucSimpleControl);

我还没有测试过这种方法,只是想一想,有了这个,你可能会得到一些你需要处理的会话覆盖问题。

希望这会有所帮助!!

老:这是你所期待的吗?文本框和按钮控件在 System.Web.UI.WebControls 命名空间中可用。

 void Page_Load(Object sender, EventArgs e)
 { 
    TextBox input = new TextBox();
    input.Id ="input";
    this.PlaceHolder.Controls.Add(input);
    Button btnSend=new Button();
    btnSend.Id ="btnSend";
    btnSend.Text="Send";
    btnSend.Click += new EventHandler(btnSend_Click);
    this.PlaceHolder.Controls.Add(btnSend);
}
void btnSend_Click(object sender, EventArgs e)
{
      // throw new NotImplementedException();
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:PlaceHolder ID="phHolder" runat="server"></asp:PlaceHolder>
    </form>
</body>
</html>

代码隐藏:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Init()
    {
        GenerateContorls();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    private void GenerateContorls()
    {
        TextBox newTxt = new TextBox() { ID = "txtsend" };
        Button newBtn = new Button() { Text = "Send", ID = "btnsend" };
        newBtn.Click += btnsend_Click;
        phHolder.Controls.Add(newTxt);
        phHolder.Controls.Add(newBtn);
    }
    protected void btnsend_Click(object sender, EventArgs e)
    {
        TextBox txt = (TextBox)this.FindControl("txtsend");
        //your code
    }
}

希望对您有所帮助