実行時にいくつかのコントロールを追加したいWebフォームページがあります。現在、リテラルコントロールを使用してPage_Loadイベントでこれを達成しています。WebFormsにテキストボックスを挿入し、ポストバック時の値を保持する
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<input id="TextBox1" type="text" runat="server"/>
<asp:Literal ID="Literal1" runat="server" Visible="false"></asp:Literal>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</asp:Content>
そして、背後にあるコード:
protected void Page_Load(object sender, EventArgs e)
{
Literal1.Visible = true;
if (!IsPostBack) Literal1.Text = "<input id=\"TextBox2\" type=\"text\" runat=\"server\"/>";
}
この作品ページは次のようになります例えば
は(TextBox1テキストボックスは、ASPのちょうどそれが動作することを示すための制御ではないことに注意してください)両方のテキストボックスが画面に表示されますが、両方に値を入力してポストバックをトリガーすると、TextBox1の値だけが保持されます。
コードをOnPreRenderとOnPreLoadに移動しようとしましたが、同じ問題があります。
私は、Textbox2がまだ属性としてrunat="server"
を持っている間に、ページソースを見て、TextBox1がUniqueId(例えばctl00 $ MainContent $ TextBox1)を持っていることに気付きました。あなたはテキストボックスを挿入したい場合は
これは従来の製品ですdはスキンが生のHTMLとして注入される、私はそれを解析する方法を知らない – Newm