asp.net/C#控件-存储上一页加载的值 控件(例如标签)在页面加载时更改值 页面加载前,标签值为“x” 继续加载页面此时x自然丢失,那么存储上一页的值的简单方法是什么呢 装载
如果没有任何代码示例,我不确定这是否是您的意思,但我从内存中知道,在ASP.NET中,您可以访问“上一页”属性,如下所示:asp.net/C#控件-存储上一页加载的值 控件(例如标签)在页面加载时更改值 页面加载前,标签值为“x” 继续加载页面此时x自然丢失,那么存储上一页的值的简单方法是什么呢 装载,c#,asp.net,C#,Asp.net,如果没有任何代码示例,我不确定这是否是您的意思,但我从内存中知道,在ASP.NET中,您可以访问“上一页”属性,如下所示: Page lastPage = currentPage.PreviousPage 返回整个页面对象。假设您的标签定义如下: <asp:label id="myLabel" runat="server" /> 因此,请确保lastPageVal是一个静态变量,然后它也将在整个页面中持续存在。听起来您想要的是页面以前状态的历史记录,或者至少是一个以前的值。我可以
Page lastPage = currentPage.PreviousPage
返回整个页面对象。假设您的标签定义如下:
<asp:label id="myLabel" runat="server" />
因此,请确保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.
状态管理-静态变量通常是最简单的方法。然后只需检查变量是否与测试方法相同。@Adam网页中的静态变量在所有页面视图之间共享Put x changed value in Hidden field(隐藏字段)和get Hidden field value in page_Init事件(如page.Request(page.FindControl(“hdnPageIdField”))Scott,感谢您的详细响应。不过我有一些疑问。在我的例子中,我希望存储值以供将来使用的是另一个方法调用的Button\u Click方法,该方法由Page\u Init调用。因此,在所有处理完成后,我将页面加载代码添加到我的按钮单击方法的末尾。我想在同一方法的开头检索前一个值。所以我要移动ViewState[“pageState”]=\u pageState代码>在按钮的开头单击,我在哪里实际阅读我需要的信息?难道我不能从_pageState读取吗?为什么还要使用_pageState呢?难道我不能单独使用ViewState,并在用下一个值覆盖它之前读取ViewState吗?
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwULLTEyMzgxNzgyNDIPZBYCZg9kFgICAQ9kFggCAQ9kFgJmD2QWAgIBD2QWAmYPZBYMA
... etc.