c# - 如何从共享类中访问 ViewState?

标签 c# asp.net

我编写了一些网页,这些网页使用需要 ViewState 值的常见例程。

能否将 ViewState 传递到函数中?

如果是,怎么做到的?

如果没有,我还能如何从类中的方法访问它们?

最佳答案

这是关键语句:

common routines that required ViewState values

但是函数并不真正需要“ViewState”值——它们只需要值。如果函数对 stringint 进行操作,那么最好以这种方式编写函数,这样更容易进行单元测试。

如果您想要读取和/或操作一些非常具体的值,那么您可以创建一个这样的类:

public class MyPageValues
{
    public string Value1 {get;set;}
    public string Value2 {get;set;}
}

然后添加从 ViewState 加载值的构造函数或扩展方法。

public class MyPageValues
{
    public string Value1 {get;set;}
    public string Value2 {get;set;}

    public MyPageValues(){} //default constructor
    public MyPageValues(System.Web.UI.StateBag viewState)
    {
        Value1 = (string)viewState["Value1"];
        Value2 = integer.Parse(viewState["Value2"]); //Do some better checking.
    }
}

更好的是,只需将整个类序列化到 View 状态并从那里检索它。

[Serializable()]
public class MyValues
{
    public string Value1 {get;set;}
    public string Value2 {get;set;}
}

public partial class YourPage: System.Web.UI.Page
{
    private MyValues _values;

    protected void Page_Load(object source, EventArgs e)
    {
        _values = ViewState["myValues"] as MyValues ?? new MyValues ();
    }

    protected void Page_PreRender(object sender, EventArgs e)
    {
        ViewState["myValues"] = _values;
    }
}

这样你就可以在 Page_Load 中从 ViewState 中提取类(或者在需要时创建一个新实例),读取它,操作它,将它传递给其他函数,然后当你完成后,你只需将整个事情原封不动地保存回 ViewState

关于c# - 如何从共享类中访问 ViewState?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36647820/

相关文章:

c# - 如何将 List<AnonymousType#1> 转换为 List<Model>?

c# - 如何避免闪烁按钮WPF

c# - 身份框架为用户创建一个新密码(没有密码)

javascript - 在我的 ASP.NET Web 解决方案中,OnClientClick 在返回 true 时不会传递给 OnClick 代码

c# - 中等信任度的 ASP.NET MVC

asp.net - 我可以从代码中调用 ASP.NET RegSQL 吗?

c# - 为什么新的.Net 4.0 EF应用程序会随机锁定?

asp.net - 在 IE 中混合 NTLM 与表单例份验证(空 POST 问题)

javascript - 如何在div标签中做多行标题?

c# - 数据库未更新