面板设置为隐藏,然后可见丢失文本框值

时间:2012-02-17 20:38:59

标签: c# asp.net

我希望我能正确解释这一点。

我的网格是第三方购物车软件的一部分。该网格有一排数量文本框,客户可以在其中输入他们想要购买的每件商品的数量。

我将此网格放在面板中,以便我可以使用

打开或关闭它
myPanel.Visible=true;

我还有一个显示按钮,使用上面的代码方法隐藏一个按钮。

如果我在文本框中输入值,然后单击隐藏按钮,然后单击显示按钮,当面板重新出现时,值为零。如果我然后重新加载页面(浏览器重新加载),那么该值将返回原来的状态。这是一个非常好的魔术,但不是我需要的。我做错了什么?

最终我想从日历中选择一个日期,当它被隐藏但尚未播放时...只是显示/隐藏按钮。

由于

2 个答案:

答案 0 :(得分:1)

这听起来像ASP.NET WebFormsViewState

的正确行为
  1. 第一页加载:面板可见,面板加载了初始值。
  2. 隐藏面板:按下该按钮后会立即发回信息。 myPanel设置为不可见,在服务器端表示未生成面板的HTML(这可以通过查看生成的HTML来确认)。
  3. 显示面板:再次发布回帖。但由于这些值未在上一步中呈现,因此ViewState中无法使用这些值来重新填充面板。
  4. 重新加载页面:重新开始此过程(与步骤1相同)
  5. 一种可能的解决方案是在客户端隐藏面板(<div)。这样做的好处是不会往服务器进行往返只是启用/禁用面板。

答案 1 :(得分:1)

您的代码应如下所示......

显示和隐藏按钮定义以显示/隐藏面板是Java脚本。那个人在服务器端没有Button click事件的处理程序......这种方法通常建议很快......


示例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();
                }
            }
        }

    }
}