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