C# 在WebForms中插入文本框并在回发时保留该值
我有一个WebForms页面,我想在运行时向其中注入一些附加控件。目前,我正在使用文字控件在Page_Load事件中实现这一点 例如,页面如下所示(请注意,TextBox1不是一个asp控件,只是为了表明它可以工作):C# 在WebForms中插入文本框并在回发时保留该值,c#,asp.net,webforms,C#,Asp.net,Webforms,我有一个WebForms页面,我想在运行时向其中注入一些附加控件。目前,我正在使用文字控件在Page_Load事件中实现这一点 例如,页面如下所示(请注意,TextBox1不是一个asp控件,只是为了表明它可以工作): 以及背后的代码: protected void Page_Load(object sender, EventArgs e) { Literal1.Visible = true; if (!IsPostBack) Literal1.Text = "<inp
以及背后的代码:
protected void Page_Load(object sender, EventArgs e)
{
Literal1.Visible = true;
if (!IsPostBack) Literal1.Text = "<input id=\"TextBox2\" type=\"text\" runat=\"server\"/>";
}
受保护的无效页面加载(对象发送方,事件参数e)
{
Literal1.可见=真;
如果(!IsPostBack)Literal1.Text=“”;
}
这很好,两个文本框都会出现在屏幕上,但如果我在这两个文本框中都键入一个值并触发回发,则只保留TextBox1的值
我尝试将代码移动到OnPreRender和OnPreLoad,但仍然存在相同的问题
我注意到,当我查看页面时,源TextBox1有一个唯一的ID(例如ctl00$MainContent$TextBox1),而Textbox2仍然有
runat=“server”
作为一个属性。如果要插入文本框,应该使用如下占位符:
<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"];
}
受保护的无效页面加载(对象发送方、事件参数e)
{
TextBox TextBox=新建TextBox();
TextBox.ID=“TextBox2”;
plh.Controls.Add(文本框);
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
var Text1=TextBox1.值;
var Text2=Request.Form[“TextBox2”];
}
如果要插入文本框,应使用如下占位符:
<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"];
}
受保护的无效页面加载(对象发送方、事件参数e)
{
TextBox TextBox=新建TextBox();
TextBox.ID=“TextBox2”;
plh.Controls.Add(文本框);
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
var Text1=TextBox1.值;
var Text2=Request.Form[“TextBox2”];
}
不能像这样插入服务器控件。您需要按照@Arvin的回答中的建议添加它们
但是,您可以使用与正在执行的操作类似的注入非ASP.NET HTML控件并获取其值
从代码中将输入的id
更改为name
,并删除runat=“server”
:
然后,如果要在回发时添加控件及其值:
Literal1.Text = "<input name=\"TextBox2\" type=\"text\" value=\"" +
Server.HTMLEncode(textbox2value) + "\" />";
Literal1.Text=”“;
不能像这样插入服务器控件。您需要按照@Arvin的回答中的建议添加它们
但是,您可以使用与正在执行的操作类似的注入非ASP.NET HTML控件并获取其值
从代码中将输入的id
更改为name
,并删除runat=“server”
:
然后,如果要在回发时添加控件及其值:
Literal1.Text = "<input name=\"TextBox2\" type=\"text\" value=\"" +
Server.HTMLEncode(textbox2value) + "\" />";
Literal1.Text=”“;
这是一个遗留产品,皮肤作为原始HTML注入,我不知道如何解析它。这是一个遗留产品,皮肤作为原始HTML注入,我不知道如何解析它
Literal1.Text = "<input name=\"TextBox2\" type=\"text\" value=\"" +
Server.HTMLEncode(textbox2value) + "\" />";