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

时间:2014-11-15 09:53:41

标签: c# asp.net webforms

我有一个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控件。

2 个答案:

答案 0 :(得分:2)

修改

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

如果我理解当前,你想从用户那里获取Markup控件和scriplets的标记。

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

  1. 创建一个虚拟.ascx控制文件,例如DynamicMarkup.ascx,内容为空
  2. 将此用户控件添加到您要静态显示此控件的页面(xxxx.aspx),以便它注册到页面
  3.   <%@ 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的创建对象
    2.   

      DynamicMarkup dynamicMarkup = LoadControl(“〜/ DynamicMarkup.ascx”)as   DynamicMarkup;

           

      DynamicMarkupContainer.Controls.Add(ucSimpleControl);

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

      希望这会有所帮助!!

      <强> OLD: 这是你期待的吗? System.Web.UI.WebControls命名空间中提供了TextBox和Button控件。

       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();
      }
      

答案 1 :(得分:0)

<%@ 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
    }
}

希望有所帮助