2012-08-02 48 views
4

我对.NET并不太熟悉,但我想将一个简单的值(1到1000之间的数字,即特定的div的高度)保存到视图状态并在更新面板重新加载时(在标记中或在JavaScript中)检索它。什么是最简单的方法来做到这一点?保存一个值并从视图状态中读取

This page给了我下面的代码:

string strColor; 
if (Page.IsPostBack) 
{ 
    // Retrieve and display the property value. 
    strColor = (string)ViewState["color"]; 
    Response.Write(strColor); 
} 
else 
    // Save the property value. 
    ViewState["color"] = "yellow"; 

不过,我不是在哪里或如何访问例如strColor完全清楚。

既然这是在代码背后,那么Response.Write哪里会吐出那个代码呢?我试过这段代码时找不到它。我该如何使用javascript来设置该值,而不是将其设置在代码后面?

回答

6

您可以简单地设置在div作为服务器控件像这样:

<div id="yourdiv" runat="server" ... 

和页面职位时背部;只需设置其属性即可设置其高度;例如:

yourDiv.Attributes("style","height:"+height_read_from_ViewState+"px;"); 

或者,你可以存储在客户端的高度,采用了隐藏字段和读取隐藏字段的服务器端的值来设置div的高度。

<asp:hiddenfield id="hdnHeight" runat="server" /> 

您设定的高度在Javascript像这样:

function setHeight(value) 
{ 
    document.getElementById('<%=hdnHeight.ClientID').value=value; 
} 

而且在后回到服务器端:

yourDiv.Attributes("style","height:"+hdnHeight.Value+"px;"); 
+0

这是非常有帮助的 - 我很抱歉,我对此很陌生,但它不是在我看来,如何让隐藏领域通过回传来保持其价值。我已经创建了隐藏字段,并且保持它的值使用javascript更新。因此,如果div高度为30,隐藏字段为30,但在重新加载时,隐藏字段将再次为空。我错过了什么? 编辑: - 哎呀!对不起,它会自动执行。我一定有一个缓存问题。这工作完美,谢谢! – brentonstrine 2012-08-02 17:52:42

+0

你不会错过任何东西。如果页面被重新加载,就像在“输入url并按回车键”那样,因为你是第一次进入页面,所以这个值被重置是正常的。如果您正在讨论回发(即单击页面上的按钮并提交表单),则隐藏字段中的值应保留,因为ViewState将为您保留该值。那是 - 梯子 - 你怎么了? – Icarus 2012-08-02 17:56:33

+0

你是对的:我很困惑,因为我正在重新加载而不是做回发。为了让该值通过重新加载持续存在,我想我需要在服务器上保存一些内容 - 现在不值得我付出努力,因为我需要的主要功能是通过回发持久化,所以现在可以运行,谢谢! – brentonstrine 2012-08-02 18:02:52

1

我会将strColor更改为一个属性,并使用viewstate作为该propery的后备存储。

public string strColor 
{ 
    get 
    { 
     return ViewState["strColor"]; 
    } 
    set 
    { 
     ViewState["strColor"] = value; 
    } 

} 

然后您可以使用它像任何其他财产:

if (Page.IsPostBack) 
{ 
    // Retrieve and display the property value. 
    Response.Write(strColor); 
} 
else 
    // Save the property value. 
    strColor = "yellow"; 
+0

酷。那么如何将strColor设置为除“黄色”之外的其他内容呢?我想将它设置为div的高度 - 如果我动态填充隐藏文本输入会有帮助吗? – brentonstrine 2012-08-02 17:34:56

+0

只要使用正常变量,就可以像普通变量一样使用它。我真的不明白你的背景,所以我不能就任何超过你原来的问题的建议。 – Jeff 2012-08-02 17:37:47

+0

让我这样说吧:假设我不想将'strColor'保存为'黄色',但是当用户输入一个javascript提示时提示输入的值。我怎样才能设置'strColor'到用户的反应与JavaScript? – brentonstrine 2012-08-02 17:40:46