面板设置为隐藏然后可见会丢失文本框值
本文关键字:文本 设置 隐藏 然后 | 更新日期: 2023-09-27 18:25:11
我希望我能正确地解释这一点。
我有一个网格,是我们第三方购物车软件的一部分。这个网格有一排数量文本框,客户可以在其中输入他们想要购买的每件东西的数量。
我把这个网格放在一个面板里,这样我就可以用打开或关闭它
myPanel.Visible=true;
使用上面的代码方法,我还有一个要显示和隐藏的按钮。
如果我在文本框中输入一个值,然后单击隐藏按钮,然后单击显示按钮,当面板再次出现时,值为零。如果我随后重新加载页面(浏览器重新加载),则该值将返回原来的值。这是一个很好的魔术,但不是我需要的。我做错了什么?
最终,我想在日历隐藏但尚未播放时从日历中选择一个日期。。。只有显示/隐藏按钮。
感谢
这听起来像是ASP.NET WebForms
和ViewState
的正确行为
- 首页加载:面板可见,并且面板加载了其初始值
-
隐藏面板:一旦按下按钮,就会出现回帖。
myPanel
被设置为不可见,这在服务器端意味着没有生成面板的HTML(这可以通过查看生成的HTML来确认) -
显示面板:再次发生回发。但是,由于在上一步中未渲染这些值,因此它们在
ViewState
中不可用于重新填充面板 - 重新加载页面:这将重新启动过程(与步骤1相同)
一个可能的解决方案是在客户端隐藏面板(<div
)。这还有一个好处,即不必往返于服务器,只需启用/禁用面板。
您的代码应该如下所示。。。
显示和隐藏按钮定义显示/隐藏面板是Java脚本。这意味着在服务器端没有按钮点击事件的处理程序。。。这种方法建议正常且快速。。
示例ASPX代码
<script type="text/javascript" language="javascript">
function Hide() {
var ID = document.getElementById('pnl');
ID.style.display = 'none';
return false;
}
function Show() {
var ID = document.getElementById('btnHide');
ID.style.display = 'block';
return false;
}
</script>
<asp:panel id="pnl" runat="server">
<asp:GridView ID="grd" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="ed" runat="server" Text='<%#Eval("name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:panel>
<asp:button text="Hide" runat="server" id="Button1" onclientclick="return Hide();" />
<asp:button text="Show" runat="server" id="btnShow" onclientclick="return Show();" />
后面的示例代码
public partial class Default4 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
using (DataTable Dt = new DataTable())
{
using (DataColumn Dc = new DataColumn("Name"))
{
Dt.Columns.Add(Dc);
DataRow dr = Dt.NewRow();
dr["name"] = "1";
Dt.Rows.Add(dr);
dr = Dt.NewRow();
dr["name"] = "2";
Dt.Rows.Add(dr);
grd.DataSource = Dt;
grd.DataBind();
}
}
}
}
}