簡體   English   中英

如何在運行時將ASP.net和HTML控件添加到頁面?

[英]How to add ASP.net and HTML Controls to the page at runtime?

我有一個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控件那樣工作。

編輯:

注意:項目類型應該是網站,而不是Web應用程序。 Web應用程序不支持按需編譯,而網站是。

如果我的理解正確,您想從User中獲取標記,該標記甚至還包含asp.net控件和Scriplets。

如果是這種情況,請執行以下步驟:

  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. 將用戶輸入標記(可能根據您的條件從數據庫中獲取)寫入頁面(xxxx.aspx)的頁面OnInit中的DynamicMarkup.ascx文件以及此DynamicMarkup的create對象

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

DynamicMarkupContainer.Controls.Add(ucSimpleControl);

我還沒有測試這種方法,請考慮一下,這樣您可能會遇到一些會話覆蓋問題,需要解決。

希望這會有所幫助!

老:這是您所期望的嗎? 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();
}
<%@ 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
    }
}

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM