C#MultiView SetActiveView ID无法正常工作

时间:2011-04-18 17:51:02

标签: c# asp.net set multiview activeview

我目前正试图弄清楚我的代码有什么问题:

不起作用

if(...){  
    ...  
}else{  
    someVariableAsString = "myValue123";  
    MultiView1.SetActiveView(My3thView_ID_In_MultiViewControl);  
}

作品

if(...){  
    ...  
}else{  
    //someVariableAsString = "myValue123";  
    MultiView1.SetActiveView(My3thView_ID_In_MultiViewControl);  
}

..为什么和任何解决方案?

3 个答案:

答案 0 :(得分:1)

因为您试图对INIT而不是加载进行操作,所以尚未在服务器上附加数据。

您应该在ASP.NET中找到对Web请求生命周期的回顾:MSDN ASP.NET Page Life Cycle

以下是相关摘录:

  

初​​始化

 During page initialization, controls on the page are available and
     

每个控件的UniqueID属性是   组。主页和主题也是   如果适用,应用于该页面。如果   当前的请求是回发,   回发数据尚未加载   和控制属性值没有   已从视图恢复为值   状态。

 Load

 During load, if the current request is a postback, control 
     

属性加载了信息   从视图状态和控制中恢复   状态。

将您尝试执行的代码移入(或之后)页面加载处理程序(记得测试IsPostBack)并查看是否达不到您想要的效果。

尝试新功能:

尝试将您的工作改为:

if(...){  
    ...  
}else{  
    string someVariableAsString = "myValue123";  
    MultiView1.SetActiveView(My3thView_ID_In_MultiViewControl);  
}

答案 1 :(得分:0)

听起来someVariableAsString可能会抛出异常导致代码无法到达下一行。检查你的变量类型。

答案 2 :(得分:0)

我能够解决我的案子:
我将someVariableAsString更改为视图属性 为Gobal.asax创建了一个会话变量,现在我得到了正确的结果(稍后加载一页)。 :-)

但在我的情况下,这样做。

问题解决了。

onInit{  
m_myVariable;  
myFunction();  
... 
}  

void myFunction(){   
// if clause described up  
}  

public View myVariable  
{  
get { return m_myVariable = Session["myVariableAtSession"] as View; }  
set { m_myVariable = value;  
 Session["myVariableAtSession"] = m_myVariable;  
 }  
}