gpt4 book ai didi

asp.net - 不受限制地自由显示和隐藏部分网页表单,以避免 ViewState 加载问题

转载 作者:行者123 更新时间:2023-12-04 06:02:41 25 4
gpt4 key购买 nike

问题

我有一个网络表单,我想隐藏和显示一些面板。当我说“面板”时,我指的不是 Panel 控件,而是 html 中的一个 Pane (通常由 DIV 表示)。

好吧,我想按我的意愿显示和隐藏这个面板...没有限制意味着不一定只有一个面板必须可见,也可以是 2、3 或 4。

通常我是通过以下方式实现的:

<div id="mypane1" runat="server">
...
</div>
<div id="mypane2" runat="server">
...
</div>
<div id="mypane3" runat="server">
...
</div>

还有这个:

this.mypane1.Visible = true;
this.mypane2.Visible = false;
this.mypane3.Visible = true;

不幸的是,这些面板包含控件,其中一些从一开始就没有显示(第一次加载 Web 表单,所以当没有 PostBack 发生时)。这会导致 ViewState 加载出现问题。

关于ViewState加载

当然很多人显然会问我的这些 ViewState 问题。好吧,简而言之,事情是这样的:ViewState 加载错误不容易管理,但最后我可以理解以下内容。

假设有这个:

<!-- In .aspx -->
<div id="mypane1" runat="server">
...
<asp:Literal ID="..." runat="server" ...></asp:Literal>
<asp:TextBox ID="..." runat="server" ...></asp:TextBox>
...
</div>
<div id="mypane2" runat="server">
...
<asp:LinkButton ID="lb1" OnClick="lb1_Click" runat="server" ...></asp:LinkButton>
<asp:LinkButton ID="lb2" OnClick="lb2_Click" runat="server" ...></asp:LinkButton>
<asp:LinkButton ID="lb3" OnClick="lb3_Click" runat="server" ...></asp:LinkButton>
...
</div>
<div id="mypane3" runat="server">
...
<asp:TextBox ID="..." runat="server" ...></asp:TextBox>
<asp:LinkButton ID="lb4" OnClick="lb4_Click" runat="server" ...></asp:LinkButton>
<asp:TextBox ID="..." runat="server" ...></asp:TextBox>
...
</div>

// In .aspx.cs
protected void Page_Load(...) {
if (!this.IsPostBack) {
this.mypane1.Visible = true;
this.mypane2.Visible = false;
this.mypane3.Visible = true;
}
}

/// ... In the page many happens and the panes are shown and hidden ... ///

// Event Handlers
protected void lb1_Click(object sender, EventArgs e) {
...
}
protected void lb2_Click(object sender, EventArgs e) {
...
}
protected void lb3_Click(object sender, EventArgs e) {
...
}
protected void lb4_Click(object sender, EventArgs e) {
...
}

问题如下。

  • 一开始 pane2 没有显示。

  • 在显示一些操作 pane2 及其控件后。

  • 用户点击 lb1 --> ViewState 错误

请注意,与 pane2 的控件关联的每个事件都会发生同样的情况。是否按下了 lb4,没问题。

问题是起始层次结构由 Pane 1 和 3 中的控件表示。当事件由不属于起始层次结构的控件引发时,ViewState 被发现不一致(因为我对 HtmlControls,通常 ServerControls 更智能,当在其中添加控件时可以更好地管理 ViewState。

可行的解决方案

请注意,我可以简单地执行以下操作来隐藏和显示面板:

this.mypane2.Attributes.Add("display", "none");

这不是我想做的事情,原因有二:

  • 我不希望 Pane 呈现为 Html。

  • 我想使用服务器控件。

请求

我需要使用 web 控件来管理我的面板管理,我不能使用 HtmlControl,因为 Control Hierarchy 没有正确加载。

我尝试了 MultiView 和 View 控件,但它们使我只能使用一个事件 View 。我该怎么办?

注意:请不要过分关注 ViewState 问题,它只是一个很好的描述,让你知道发生了什么,我唯一的兴趣是找到一种自由隐藏和显示 Pane 的方法使用服务器控件。

谢谢

最佳答案

我假设将面板的可见性设置为 false 会导致子项无法添加到 ViewState 或以某种方式干扰它。对吗?

鉴于此,如果您希望就 .Net 渲染引擎而言控制在那里,但对最终用户隐藏,您可以尝试使用 css 显示和隐藏它们,即

显示

pnlDemo.Attributes.Add("style", "display:block");

隐藏

pnlDemo.Attributes.Add("style", "display:none");

我曾遇到过需要 ASP.Net 控件用于 ViewState 的情况,但未显示。在适当的时候,我会使用 JQuery 向他们展示,并且此方法适用于该场景,因此它可能适用于您的场景。

关于asp.net - 不受限制地自由显示和隐藏部分网页表单,以避免 ViewState 加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8770859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com