- 控制(例如标签)在页面加载时更改值。
- 在页面加载之前,标签值为“x”
- 继续加载页面自然x在此处丢失,那么什么是简单的方法来存储来自前一页 加载的值?
回答
我不知道如果这是你的意思是,没有任何代码示例,但是我从记忆知道,在ASP.NET可以访问以前的页面属性,像这样:
Page lastPage = currentPage.PreviousPage
它返回整个页面对象。假设你的标签定义,像这样:
<asp:label id="myLabel" runat="server" />
然后你就可以与访问text属性:
Label myLabel = lastPage.FindControl("myLabel") as Label;
lastPageVal = myLabel.Text
所以确保lastPageVal是一个静态变量,那么它也将持续整个页面。
这听起来像你想要的是以前的页面状态的历史,或者至少只有一个以前的值。我可以建议一种方法来做到这一点,但有一个警告:不要过度使用它。您可以在ViewState
之间的帖子之间保留数据,但该数据会写入页面本身。这样,当用户发布表单时,他们也会将该数据发回。 (更多结尾。)
下面是一个简单的例子。首先,定义一些类,它包含所有的附加状态要存储:
[Serializable]
public class PageState
{
public string MyLabelPreviousText {get;set;}
}
然后在后面的代码:
public partial class MainPage : System.Web.UI.Page
{
private PageState _pageState;
protected void Page_Load(object source, EventArgs e)
{
_pageState = ViewState["pageState"] as PageState ?? new PageState();
_pageState.MyLabelPreviousText = MyLabel.Text;
}
protected void Page_PreRender(object sender, EventArgs e)
{
ViewState["pageState"] = _pageState;
}
当加载页面,你检查,看看是否你已经将你的班级(在这种情况下称为PageState
)保存到ViewState
。如果你还没有,你创建一个新的。
在PreRender
事件中,更新完页面后,您将使用标签文本更新该类,然后再次将整个事件保存到ViewState
。这种方式下次页面加载时,你可以再次检索它。
我不确定您希望在哪一点保存标签的以前的文字。在本例中,它将在Load
事件期间保存文本。这样,如果从那时起文本在任何时候都发生了变化,那么您保存的值就是标签的原始文本。具体细节可能会因您尝试执行的操作而有所不同,但此模式可让您保存这类自定义数据,而无需使用Session
并在内存中堆叠如此的数据。
我提到过没有过度使用它。如果您保存一些标签,控件和其他数据,ViewState
可能不会太大。无论如何,ASP.NET已经将每个服务器控件的状态都放在那里。但如果你真的疯了,那么ViewState
可能会变得很大。所有这些数据都被写入页面,并且每次回发都将其全部发送回服务器。
这可能不是一个大问题,但要注意它。使用Chrome开发工具,Fiddler,甚至只是检查页面源代码,以查看数据是否变得太大以至于可能会影响性能。
对于任何人谁不熟悉,ViewState
看起来像这样在HTML源代码:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwULLTEyMzgxNzgyNDIPZBYCZg9kFgICAQ9kFggCAQ9kFgJmD2QWAgIBD2QWAmYPZBYMA
... etc.
正如你可以看到,它实际上是一个隐藏的表单输入。 ASP.NET将页面控件的所有细节都放在表单中,这样当您发布表单时,它可以将所有这些细节放在一起,并确保页面在回发后看起来相同。这就是为什么当我们第一次检查if(!IsPostBack())
时,我们设置了很多控件。如果它是回发,那么我们不需要重新填充下拉菜单等。他们从那个ViewState
数据恢复。
该方法在功能上与添加一个额外的隐藏输入相同,如一条评论中所建议的。不同之处在于您使用的是现有的隐藏输入(视图状态),并且如果您需要保存多个值,那么您只需使其成为类的属性,而不是添加越来越多的隐藏输入。
Scott ,谢谢你的详细回复。但我有一些疑虑。在我的情况下,我想存储这些值以供将来使用,它是由Page_Init调用的由另一个方法调用的Button_Click方法。因此,在所有处理完成后,我在Button_Click方法的末尾添加Page_Load的代码。我想在同一个方法的开头检索前一个值。所以我应该在Button_Click的开始处移动ViewState [“pageState”] = _pageState;'在哪里读取我需要的信息?我应该不能从_pageState读取? –
另外为什么要使用_pageState呢?我不能单独使用ViewState,并且在用我的下一个值覆盖之前从ViewState中读取数据? –
- 1. ABAddressBook商店价值在NSDictionary
- 2. jQuery商店价值.append
- 3. 未加载商店
- 4. 阻止HtmlUnit加载PSN商店页面?
- 5. 网上商店的价格选择
- 6. MIPS商店字/加载词
- 7. PHP商店价值<a>标签
- 8. 商店从ResultSet中的变量一个值,并用它另一页上
- 9. 在ExtJs中加载商店后,如何从函数返回值?
- 10. 笨,如何从价值查询商店里面的foreach
- 11. 从商店中的选择记录中获取价值
- 12. 在页面加载时订阅价值
- 13. iOS - 在应用商店中加载下载页面?
- 14. 商店报价解析
- 15. 更改商店网站上的商品价格(Magento)
- 16. ExtJS4 - 从另一个网格加载商店
- 17. Windows 8商店 - 调试应用程序从商店下载
- 18. 如何从Sencha获取商店价值extjs
- 19. ExtJs - 如何通过id从商店中获取价值?
- 20. vuejs 2如何从vuex观看商店价值
- 21. 如何从ExtJS商店打印(或警示)价值?
- 22. 不正确的商店加载
- 23. 商店中的加载监听器
- 24. 从People Editor Control获取价值?
- 25. 如何在商店加载之前添加一个面板到店面并在店面加载后删除
- 26. Magento:从另一家商店获取产品价格?
- 27. ExtJS的从商店
- 28. 地图上的Java商店值
- 29. 使用json商店加载图像
- 30. ExtJS等待多家商店加载
状态管理 - https://msdn.microsoft.com/en-us/library/75x4ha6s.aspx – riteshmeher
静态变量通常是最简单的方法。然后检查变量是否与测试方式保持一致。 – Adam
@Adam一个网页中的静态变量_shared页面的所有视图__ – stuartd