在回发时保留样式属性
Retain Style Properties on postback
我有一个 div 和 4 个下拉控件。
默认 div 使用 Style="display:none"
隐藏。
第一个下拉菜单没有自动回发事件。
Div 的显示 属性 在第一个下拉列表的几个值上发生了变化。一旦它可见。用户可以更改自动回发为真的下拉字段 2/3/4 中的值。
当用户更改任何 2-5 个下拉控件中的值时,回发触发并将 Div 的显示 属性 设置为 Style="display:none"
。
如何保留 div 的显示 属性。
这是在 .aspx 页面上
样式不是 PostBack 中包含的数据的一部分。为了包含它们,您可以在页面上创建一个隐藏字段,您也可以在客户端代码更改 div 的可见性时设置该字段。
<asp:HiddenField ID="hidden" runat="server" />
当 PostBack 到达服务器时,您评估隐藏字段的 Value
属性 并在 div
上设置样式,使其与存储的状态相匹配在隐藏领域。为了能够在 .NET 代码中更改 div
的样式,您需要确保指定了 runat="server"
:
<div ID="myDiv" runat="server">
<!-- ... -->
</div>
示例
以下示例显示了如何使用隐藏字段将可见性传输到服务器并在客户端恢复它。在 ASPX 中,有 div
,用于存储可见性的隐藏字段和设置 div
可见性以及隐藏字段值的脚本:
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<div id="myDiv" runat="server" style="display:none;">
Div is visible
</div>
<asp:HiddenField ID="myHidden" runat="server" />
<input type="button" value="Toggle visiblity" onclick="javascript:toggleDiv()" />
<asp:Button ID="btn" runat="server" Text="Postback" />
<script type="text/javascript">
function toggleDiv()
{
$(myDivId).toggle();
$(myHiddenId).val($(myDivId).css('display'));
}
</script>
</asp:Content>
需要注意的重要一点是 div
和隐藏字段获得特殊的 ASP.NET 客户端 ID,这些 ID 不一定与 ASPX 文件中的标签 ID 匹配。因此,我注册了一个启动脚本,该脚本定义了具有 id(myDivId
和 myHiddenId
)的变量:
protected void Page_Load(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(GetType(), "DivId",
"var myDivId = '#" + myDiv.ClientID + "';" + Environment.NewLine +
"var myHiddenId = '#" + myHidden.ClientID + "';",
true);
}
当回传发生时,隐藏字段的值被传送到服务器并可以使用。我已经定义了一个 PreRender
事件处理程序,它恢复了 div
:
的可见性
protected void Page_PreRender(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(myHidden.Value))
myDiv.Style[HtmlTextWriterStyle.Display] = "none";
else
myDiv.Style[HtmlTextWriterStyle.Display] = myHidden.Value;
}
我有一个 div 和 4 个下拉控件。
默认 div 使用 Style="display:none"
隐藏。
第一个下拉菜单没有自动回发事件。
Div 的显示 属性 在第一个下拉列表的几个值上发生了变化。一旦它可见。用户可以更改自动回发为真的下拉字段 2/3/4 中的值。
当用户更改任何 2-5 个下拉控件中的值时,回发触发并将 Div 的显示 属性 设置为 Style="display:none"
。
如何保留 div 的显示 属性。
这是在 .aspx 页面上
样式不是 PostBack 中包含的数据的一部分。为了包含它们,您可以在页面上创建一个隐藏字段,您也可以在客户端代码更改 div 的可见性时设置该字段。
<asp:HiddenField ID="hidden" runat="server" />
当 PostBack 到达服务器时,您评估隐藏字段的 Value
属性 并在 div
上设置样式,使其与存储的状态相匹配在隐藏领域。为了能够在 .NET 代码中更改 div
的样式,您需要确保指定了 runat="server"
:
<div ID="myDiv" runat="server">
<!-- ... -->
</div>
示例
以下示例显示了如何使用隐藏字段将可见性传输到服务器并在客户端恢复它。在 ASPX 中,有 div
,用于存储可见性的隐藏字段和设置 div
可见性以及隐藏字段值的脚本:
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<div id="myDiv" runat="server" style="display:none;">
Div is visible
</div>
<asp:HiddenField ID="myHidden" runat="server" />
<input type="button" value="Toggle visiblity" onclick="javascript:toggleDiv()" />
<asp:Button ID="btn" runat="server" Text="Postback" />
<script type="text/javascript">
function toggleDiv()
{
$(myDivId).toggle();
$(myHiddenId).val($(myDivId).css('display'));
}
</script>
</asp:Content>
需要注意的重要一点是 div
和隐藏字段获得特殊的 ASP.NET 客户端 ID,这些 ID 不一定与 ASPX 文件中的标签 ID 匹配。因此,我注册了一个启动脚本,该脚本定义了具有 id(myDivId
和 myHiddenId
)的变量:
protected void Page_Load(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(GetType(), "DivId",
"var myDivId = '#" + myDiv.ClientID + "';" + Environment.NewLine +
"var myHiddenId = '#" + myHidden.ClientID + "';",
true);
}
当回传发生时,隐藏字段的值被传送到服务器并可以使用。我已经定义了一个 PreRender
事件处理程序,它恢复了 div
:
protected void Page_PreRender(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(myHidden.Value))
myDiv.Style[HtmlTextWriterStyle.Display] = "none";
else
myDiv.Style[HtmlTextWriterStyle.Display] = myHidden.Value;
}