我可以在Asp.Net中的另一个页面中访问一个页面的ViewState吗?

时间:2010-03-15 04:53:27

标签: asp.net

有没有办法访问另一个页面中页面的视图状态? 请详细说明答案,以清除我的怀疑,因为我认为ViewState只有页面的范围,不能在页面外访问。

3 个答案:

答案 0 :(得分:10)

您无法直接从其他页面访问一个页面的ViewState。

如果要访问特定的ViewState值,则可以在Context集合中传递该值,然后在其他页面中访问该值。

第1页

Context.Items.Add ( "variable" , ViewState["yourvalue"].ToString() );

在第2页

string myValue = Context.Items["variable"].ToString();

答案 1 :(得分:4)

几乎在所有ASP.NET访谈中都会问这个问题。这个问题的答案没有直接但我们可以通过statebag类访问。但是调用第二页应该是通过server.transfer

FirstPage.aspx

    protected void Page_Load(object sender, EventArgs e)
    {
        ViewState["Name"] = "Kamaraj";
        Server.Transfer("SecondPage.aspx");

    }
    public StateBag ReturnViewState()
    {
        return ViewState;
    }

//第二页
Secondpage.aspx

    protected void Page_Load(object sender, EventArgs e)
    {
        if (PreviousPage != null && PreviousPageViewState != null)
        {
            lblMag.Text = PreviousPageViewState["Name"].ToString();
        }
    }

    private StateBag PreviousPageViewState
    {
        get
        {
            StateBag returnValue = null;
            if (PreviousPage != null)
            {
                Object objPreviousPage = (Object)PreviousPage;
                MethodInfo objMethod = objPreviousPage.GetType().GetMethod("ReturnViewState");//System.Reflection class
                return (StateBag)objMethod.Invoke(objPreviousPage, null);
            }
            return returnValue;
        }
    }

答案 2 :(得分:0)

这也可行

FirstPage.aspx(代码背后)

public void btnTransfer_Click(object sender, EventArgs e)
{
    CompanyInfo comInfo = new CompanyInfo() { ID = 223, Name = "TCS" };
    ViewState["ViewStateCompany"] = comInfo;     
    Server.Transfer("SecondPage.aspx");
}

public CompanyInfo  GetViewValue() 
{
    CompanyInfo comInfo = (CompanyInfo )ViewState["ViewStateCompany"];
    return comInfo;
} 

SecondPage.aspx(代码背后)

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.PreviousPage != null)
    {

        Type ty = Page.PreviousPage.GetType();
        MethodInfo mi = ty.GetMethod("GetViewValue");
        CompanyInfo comInfo = (CompanyInfo)mi.Invoke(Page.PreviousPage, null);

    }
}

CompanyInfo类

public class CompanyInfo
{
    public int ID { get; set; }
    public string Name { get; set; }
}