这就是我的代码的样子。
我想知道为什么标签中的值变为空白或为空。
我想在获取数据时将值分配给用户名,并在按钮点击事件中使用它。
some1可以指导我这个,为什么会发生这种情况以及如何解决这个问题
我不想使用会话和静态。
namespace GUI
{
public partial class Updatechild : System.Web.UI.Page
{
string UserName;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//CALL A FUNCTION TO GET THE VALUE
GetData();
}
}
protected void GetData()
{
//VALUE assigned
UserName= "USER1"
}
// button click event
protected void Button_Click(object sender, EventArgs e)
{
Label.Text = UserName; //value comes as blank.
}
}
答案 0 :(得分:8)
您需要将值存储在ViewState或Session中。
通常,you need to understand the ASP.Net lifecycle和客户端 - 服务器交互模型。
答案 1 :(得分:3)
Button_Click
事件发生在PostBack
,GetData
未被调用。
答案 2 :(得分:3)
回答为什么会发生这种情况的问题:基本上每次服务器处理来自浏览器的针对该页面的请求时,ASP.NET框架都会创建UpdateChild
类的新实例。
在您的方案中,发生了2个单独的请求:一个是第一次加载页面时,另一个是用户点击按钮时。
在第一次请求期间,由于请求不是回发,因此您的UpdateChild
类会为UserName
变量分配值。但是,由于在请求完成处理后将丢弃UpdateChild
的实例,因此分配给该变量的值将丢失。如果要保留此值,则需要将其存储在页面上除类级变量之外的其他位置。最合乎逻辑的地方可能是ViewState或Session。
解决问题的一个简单方法是将UserName
的声明更改为以下内容:
string UserName
{
get { return ViewState["UserName"] as string; }
set { ViewState["UserName"] = value; }
}
答案 3 :(得分:2)
您应该从Button_Click方法调用GetData,同时GetData(string node)
需要一个字符串。你只是这样称呼GetData()
答案 4 :(得分:2)
当您回发时,将重新创建整个页面,并且由于还重新创建了UserName变量,因此它的默认值为null。因此,您需要在设置其值后将此变量放在ViewState中。
答案 5 :(得分:2)
您的Page_Load事件中的条件是否是问题。第一次加载页面时,会触发此事件,并使用GetData()中的值分配UserName字符串。但是这个值必须使用viewstate或session或static变量来保持。当用户单击该按钮时,会触发page_load事件,但由于您正在检查的If条件!IsPostBack GetData()函数不会将值赋给UserName变量。因此,您的标签永远不会获得用户名值。
HTH