这是我的代码
public partial class Books : System.Web.UI.Page
{
String Book_CategoryName = "";
String Book_SubCategoryName = "";
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Book_CategoryName = "Education";
}
}
public void BookDataLinkButton_Click(object sender, EventArgs e)
{
Response.Write("Data Found :: "+Book_CategoryName);
}
}
在这段代码中,我使用全局变量,在page_load上设置Book_CategoryName变量的值,并尝试点击LinkButton。但我无法获得"教育"。当我运行此代码时,它会显示找到的数据::
如何获取Book_CategoryName变量的值。
试着帮我解决这个问题。
在每次返回后,都会重新创建Page(Books)的实例,因此单击按钮后不会获得Book_CategoryName的值。一种方法是将变量存储在ViewState中。
private const string KEY_Book_CategoryName = "Book_CategoryName";
public String Book_CategoryName
{
get
{
return ViewState[KEY_Book_CategoryName] as string;
}
set
{
ViewState[KEY_Book_CategoryName] = value;
}
}
另一种方法是将值存储在页面的隐藏字段中。这个想法是将价值存储在一个可以在回邮期间持久存在的地方。
这是因为每个web请求调用的页面对象不同。因此,当您在Page_Load中初始化Book_CategoryName
时,它只对该请求有效,并且该值在下一个请求中丢失,即调用BookDataLinkButton_Click时。
在您的情况下,您可以简单地在声明期间初始化变量,如下所示:
String Book_CategoryName = "Education";
你可以看看这个问题了解更多信息。
或者,您可以使用ViewState
而不是"全局变量"
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ViewState["Book_CategoryName"] = "Education";
}
}
public void BookDataLinkButton_Click(object sender, EventArgs e)
{
Response.Write("Data Found :: " + (string)ViewState["Book_CategoryName"]);
}
像下面的一样更改变量
static String Book_CategoryName = "";
static String Book_SubCategoryName = "";