Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WebForms中插入文本框并在回发时保留该值_C#_Asp.net_Webforms - Fatal编程技术网

C# 在WebForms中插入文本框并在回发时保留该值

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

我有一个WebForms页面,我想在运行时向其中注入一些附加控件。目前,我正在使用文字控件在Page_Load事件中实现这一点

例如,页面如下所示(请注意,TextBox1不是一个asp控件,只是为了表明它可以工作):


以及背后的代码:

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) + "\" />";