在使用像
这样的ViewState变量时,我看到了一些似乎惯用的代码protected void Page_Load(object sender, EventArgs e)
{
//find if this is the initial get request
//after you click a button, this code will not run again
if (!IsPostBack)
{
if(ViewState["clicks"] ==null)
{
ViewState["clicks"] = 0;
}
//we're using the ViewState[clicks] to initialize the text in the text box
TextBox1.Text = ViewState["clicks"].ToString();
}
}
有人可以指出我们绝对需要检查的情况
if(ViewState["clicks"] == null)
或程序无法运行?我尝试添加另一个按钮,首先单击新按钮,然后单击Button1,程序仍然运行正常,即使在Button 2
点击后它是一个回发,程序仍然在我单击按钮1多次后运行相同次。
答案 0 :(得分:1)
因为ViewState是一个字典对象(StateBag)如果您尝试从不存在的视图状态中获取值,则不会引发异常。为了确保您想要的值处于视图状态,您可以按照自己的要求进行操作。
此外,如果您正在开发将在ViewState上禁用的页面上使用的控件或共享组件,则ViewState值将为null。
这些比特来自:http://msdn.microsoft.com/en-us/library/ms228048%28v=vs.85%29.aspx
答案 1 :(得分:0)
有人可以指出我们绝对需要检查的情况 if(ViewState [“clicks”] == null)或程序不会运行?
不确定
protected void Page_Load(object sender, EventArgs e)
{
//find if this is the initial get request
//after you click a button, this code will not run again
if (!IsPostBack)
{
//if (ViewState["clicks"] == null)
//{
// ViewState["clicks"] = 0;
//}
//we're using the ViewState[clicks] to initialize the text in the text box
TextBox1.Text = ViewState["clicks"].ToString();
}
}
那会破坏,因为你试图在你需要不为空的东西上调用一个方法,但在第一页加载时,它将为null。如果您在我们分配之前询问为什么我们首先测试它为null,那么您应该知道if-null测试不是为了分配的好处,它是为了设置文本框文本的行的好处。使用代码中存在的IF块,我们可以保证在使用ViewState [“clicks”]时.ToString()我们不会尝试在null上调用ToString()(因为ViewState [“clicks”]已被设置在其他地方或已被这个IF bock默认
按钮2后点击它是一个回发,程序仍然 我多次点击按钮1后功能相同
但是..当它是一个回发时,整个代码块根本不会运行..如果它的回发将永远不会在PageLoad中使用ViewState