我希望我能正确解释这一点。
我的网格是第三方购物车软件的一部分。该网格有一排数量文本框,客户可以在其中输入他们想要购买的每件商品的数量。
我将此网格放在面板中,以便我可以使用
打开或关闭它myPanel.Visible=true;
我还有一个显示按钮,使用上面的代码方法隐藏一个按钮。
如果我在文本框中输入值,然后单击隐藏按钮,然后单击显示按钮,当面板重新出现时,值为零。如果我然后重新加载页面(浏览器重新加载),那么该值将返回原来的状态。这是一个非常好的魔术,但不是我需要的。我做错了什么?
最终我想从日历中选择一个日期,当它被隐藏但尚未播放时...只是显示/隐藏按钮。
由于
答案 0 :(得分:1)
这听起来像ASP.NET WebForms
和ViewState
myPanel
设置为不可见,在服务器端表示未生成面板的HTML(这可以通过查看生成的HTML来确认)。ViewState
中无法使用这些值来重新填充面板。一种可能的解决方案是在客户端隐藏面板(<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();
}
}
}
}
}