C# 控件消失等问题

时间:2023-03-08 23:48:47
C# 控件消失等问题

控件消失原因:

  1.新控件的触发导致页面重载,该重载有没有达到原有控件的触发状态进而消失。

  2.(目前只发现这一点,后续又发现再更...)

1.示例:

ASPX:
<div>
<!-- button按钮 -->
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<!-- Panel容器,可在里面放控件 -->
<asp:Panel ID="Panel1" runat="server"></asp:Panel>
<!-- PlaceHolder空白占位符 -->
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</div>
/////////////////
CS:
protected void Page_Load(object sender, EventArgs e)
{
//
} protected void Button1_Click(object sender, EventArgs e)
{
TextBox t = new TextBox();
t.Text = "hello";
// 如果下面的Panel1和PlaceHolder1同时添加t,后者会覆盖前面的并且只有一个t,因为创建的t的ID已经固定,并且网页不允许相同ID
//this.Panel1.Controls.Add(t);
this.PlaceHolder1.Controls.Add(t);
Button b = new Button();
b.Text = "hello";
b.ID = "";
// 定义button的click事件。注,当用户点击该事件时,并没有使button1按钮的内容改变为"heibeibei"
// 原因是:当点击click事件后,页面进行重新加载,而t/b属于动态创建的控件,并没有达到重载的触发条件,只会重载能够执行的页面,显示的效果是t/b全部消失
// 如果要现实t/b可以放在Page_Load重载写这部分代码,又或者使用状态寄存(我这么菜,我也不懂诶,等我看到再更呗......)
b.Click += (sender2, e2) =>
{
this.Button1.Text = "heibeibei";
};
this.PlaceHolder1.Controls.Add(b);
}

未能加载文件或程序集“Microsoft.Web.Infrastructure,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。

解决办法:

工具=》NuGet程序包管理器=》程序包管理器控制台,在下面弹出来的命令行输入:PM>  Install-Package Microsoft.Web.Infrastructure

即可自动安装。