在回发时保留样式属性

时间:2016-02-15 14:29:42

标签: asp.net autopostback

我有一个div和4个下拉控件。

使用Style="display:none"隐藏默认div。

首次下拉列表没有autopostback事件。

Div的显示属性在第一个下拉列表的几个值上更改。一旦它可见。用户可以在下拉字段2/3/4中更改自动回发为真的值。

当用户更改任何2-5下拉控件中的值时,回发触发器并将该Div的显示属性设置为Style="display:none"

如何保留div的显示属性。

这是在.aspx页面

1 个答案:

答案 0 :(得分:1)

样式不是PostBack中包含的数据的一部分。为了包含它们,您可以在页面上创建一个隐藏字段,只要客户端代码更改了div的可见性,您也可以设置该字段。

<asp:HiddenField ID="hidden" runat="server" />

当PostBack到达服务器时,您评估隐藏字段的Value属性并在div上设置样式,使其与隐藏字段中存储的状态相匹配。为了能够更改.NET代码中div的样式,您需要确保指定runat="server"

<div ID="myDiv" runat="server">
    <!-- ... -->
</div>

样品

以下示例显示如何使用隐藏字段将可见性传输到服务器并在客户端上还原它。在ASPX中,有div,隐藏字段用于存储visiblity,还有一个脚本用于设置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相匹配。因此,我注册了一个使用ids定义变量的启动脚本(myDivIdmyHiddenId):

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;
}