2016-05-18 12 views
0

実行時にいくつかのコントロールを追加したい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)を持っていることに気付きました。あなたはテキストボックスを挿入したい場合は

答えて

1

あなたは、このようなサーバーコントロールを注入することはできません。あなたは@アービンの答えに示唆されるようにそれらを追加する必要があります。

ただし、実行しているものと同様の非ASP.NET HTMLコントロールを挿入して値を取得します。あなたのコードから

入力のidnameへの変更とrunat="server"をドロップ:

string textbox2value = Request.Form["TextBox2"]; 

その後、追加したい場合:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Literal1.Visible = true; 
    if (!IsPostBack) Literal1.Text = "<input name=\"TextBox2\" type=\"text\" />"; 
} 

次に、あなたはそれがポストバックに値です取得することができますポストバックのコントロールは値付き:

Literal1.Text = "<input name=\"TextBox2\" type=\"text\" value=\"" + 
    Server.HTMLEncode(textbox2value) + "\" />"; 
1

あなたは次のようにプレースホルダを使用する必要があります。

<input id="TextBox1" type="text" runat="server"/> 
<asp:PlaceHolder ID="plh" runat="server"></asp:PlaceHolder> 

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 


protected void Page_Load(object sender, EventArgs e) 
{ 
    TextBox TextBox = new TextBox(); 
    TextBox.ID = "TextBox2"; 
    plh.Controls.Add(TextBox); 
} 


protected void Button1_Click(object sender, EventArgs e) 
{ 
    var Text1 = TextBox1.Value; 
    var Text2 = Request.Form["TextBox2"]; 
} 
+0

これは従来の製品ですdはスキンが生のHTMLとして注入される、私はそれを解析する方法を知らない – Newm

関連する問題