我在此页面中有一个名为“a”的String变量。 我想要这个场景。
当页面启动时,“a”将为空。
但是当用户从DetailView控件中选择一个条目时,“a”将变为“have”。
以下是我的代码。但即使我从detailView控件中选择了一个条目,我仍然会得到“a”= null。
Dim a As String
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub GridView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GridView1.SelectedIndexChanged
a = "a"
End Sub
为什么会这样?我应该怎么做呢?
答案 0 :(得分:3)
当您使用服务器端控件和页面回发对页面执行任何操作时,所有全局声明的变量将再次重置并进入初始阶段,这就是为什么每次都获得= null的原因。
答案 1 :(得分:2)
代码没问题,但是当您在gridview上更改所选索引时更改值,而不是详细信息视图,也不会通过回发存储值。例如,如果将gridview选定值分配给标签,并且viewstate处于活动状态,则将在该控件上维护该值。但是VB上的变量会在每次回发时重置。
无论如何,您可以更新Page_Load
上的字符串Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
a = "a" 'or whatever value you need. i.e. the gridview selected data key, etc...
End Sub
或者,如果它基于用户的操作,请添加page.ispostback
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
a = "a" 'or whatever value you need. i.e. the gridview selected data key, etc...
'or for example...
a = Me.aDropDown.SelectedItem.Text
Else
a = String.Empty
End If
End Sub
如果没有,每次页面加载时,“a”总是等于string.empty。