【问题标题】:How to add ASP.net and HTML Controls to the page at runtime?如何在运行时向页面添加 ASP.net 和 HTML 控件?
【发布时间】:2015-01-12 16:57:27
【问题描述】:

我有一个 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 是在运行时生成的。事件在代码隐藏文件中定义。 我需要在运行时添加这些控件。我尝试使用 Literal-Control,但这些控件的工作方式与 HTML 控件一样,而不是 ASP.net 控件。

【问题讨论】:

  • 添加面板然后使用文字控制
  • 我试过了,但控件仍然作为 HTML 工作。我猜是这个页面没有注册控件的问题。
  • “在运行时”到底是什么意思?如果您的意思是“动态创建控件”而不是标记,您可以查看下面的答案。一旦渲染(到客户端),它们都是“HTML”。
  • 我的意思是用户将插入包含一个asp控件的html,这个html需要添加到当前页面,所以我不知道用户输入里面有什么控件,在这种情况下下面的答案不合适。
  • 如果您希望控件的行为类似于 ASP.NET 控件(贯穿 ASP.NET 页面生命周期),则需要使用 ASP.NET 将它们添加到页面中。 ASP.NET 为您的控件创建了大量 JavaScript,而不仅仅是 HTML。

标签: c# asp.net webforms


【解决方案1】:

编辑:

注意:项目类型应该是网站,而不是网络应用程序。 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 页面 (xxxx.aspx) 中的 DynamicMarkup.ascx 文件以及此 DynamicMarkup 的创建对象

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

DynamicMarkupContainer.Controls.Add(ucSimpleControl);

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

希望这会有所帮助!

旧: 这是你期待的吗? TextBox 和 Button 控件在 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();
}

【讨论】:

    【解决方案2】:
    <%@ 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
        }
    }
    

    希望对你有帮助

    【讨论】:

    • asp Html 是用户输入的,所以我不知道他在放什么控件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2011-11-07
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多