简单的button_Click取Page_Load变量值问题

zjroland 2020-08-06 09:35:23
在Page_Load中已经赋值的变量,怎么到了button_Click,又取不到值了?

public partial class Test : Web.SitePage
{
public int circleID;
protected void Page_Load(object sender, System.EventArgs e)
{
circleID = 6;
}
protected void bbt_Click(object sender, EventArgs e)
{
int testID = circleID;

}
}
结果提示 testID结果为null,怎么才能取到 circleID的值?
...全文
13830 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
自动化实战 2020-10-12
  • 打赏
  • 举报
回复


protected void Page_Load(object sender, System.EventArgs e)
{
      ViewState["circleID"]= 6;
}

protected void bbt_Click(object sender, EventArgs e)
{
      int testID = Convert.toInt32(ViewState["circleID"]);

}
一叶知秋~ 2020-09-29
  • 打赏
  • 举报
回复
引用 16 楼 一叶知秋~ 的回复:
public partial class Test : Web.SitePage { public static int circleID; protected void Page_Load(object sender, System.EventArgs e) { circleID = 6; } protected void bbt_Click(object sender, EventArgs e) { int testID = circleID; } }
只有在一个动作内才会有值 这样就在一个动作内 public partial class Test : Web.SitePage { public int circleID; protected void Page_Load(object sender, System.EventArgs e) { circleID = 6; bbt(); } protected void bbt() { int testID = circleID; } }
一叶知秋~ 2020-09-29
  • 打赏
  • 举报
回复
引用 3 楼 zjroland 的回复:
static静态的,不变的,而我需要在Page_Load中修改这个变量的值。
static 是静态的吗,没错,但是你这个是两个步骤啊,一个刷新进来就触发,他不是静态肯定不会存的,你再点一下,这又是一个动作,你之前的一个动作都已经走完了,而且变量为非静态,在第一个都动作走完就销毁了,第二动作 你点击进来 等于又是一个新的,没有被赋值的所有你那里会报是null
一叶知秋~ 2020-09-29
  • 打赏
  • 举报
回复
public partial class Test : Web.SitePage { public static int circleID; protected void Page_Load(object sender, System.EventArgs e) { circleID = 6; } protected void bbt_Click(object sender, EventArgs e) { int testID = circleID; } }
  • 打赏
  • 举报
回复
传统的 asp.net webform 程序即使是考虑“不丢失”这个单纯的方法,static 也是不对的。asp.net 是会随时重启的,IIS下的其它 web 进程也是如此。例如你随便在 config 文件中增加一个空格、或者修改一下 bin 下的库文件,或者在除 app_data 以外的删除一下网站子目录,等等许多许多操作,都会使得 ViewState、Session集合、Application集合、static 数据等等“丢失”,因为进程重启了。回收和重启是 IIS+asp.net 的基本概念,这个要在编程设计一开始就了解,不然一个公司用了这样的程序开发将来用在用户量上升期会比较倒霉。
昨天忆 2020-09-18
  • 打赏
  • 举报
回复
如果是当前页面用,使用ViewState保存值,这样就能赋值并取到circleID的值了
    public int circleID
    {
        get
        {
            return ViewState["circleID"] == null ? 0 : (int)ViewState["circleID"];
        }
        set
        {
            ViewState["circleID"] = value;
        }
    }
  • 打赏
  • 举报
回复
我看了你的代码没问题啊,输出是正常的,你怎么会输出null你, 页面每个按钮都会重新赋值的。 无论加不加ispostpaback都应该没问题啊。我试了2回,调试输出都没问题的。
八爻老骥 2020-08-29
  • 打赏
  • 举报
回复
看下WebPage的生命周期吧,好像Post回来的页面不运行Load事件的。
  • 打赏
  • 举报
回复
随便(大致)写一下吧,这类代码我们10几年不写了:
 private int _circleID;

public int circleID
{
get{
var v= ViewState["cID"];
return v==null?0:(int)v;
}
set{
ViewState["cID"] = value;
}
}



asp.net 即使发展再强劲,它的技术也就停留在2006 年哪个时间段。从 2013年以后 web 前端逐步发展为一个非常庞大、包罗万象的技术。建议学好现代的前端技术,它跟 c#、java、php甚至 python 等都毫无关系。其中微软的 typescript 作为前端技术最底层的通用基础,有点儿作用。
  • 打赏
  • 举报
回复
使用 Session 集合是不合适的,ViewState 是针对页面应用局部数据保存的,而 Session 是针对网站各个页面应用全局的。
  • 打赏
  • 举报
回复
这种古老的“web服务器端页面开发”其每一次页面回发处理,其实都是一个全新的应用被启动。要想跨 Request 过程访问页面数据,应该使用 ViewState 框架机制。
EdsionWang 2020-08-27
  • 打赏
  • 举报
回复
你确定获取不到?把你的场景描述清楚吧,就你给的代码,button_click里面输出没问题的。
小白卟白 2020-08-25
  • 打赏
  • 举报
回复
加static
threenewbee 2020-08-06
  • 打赏
  • 举报
回复
页面上用 aotopost=true runat=server
最好放在session里,而不是page的成员变量
正怒月神 版主 2020-08-06
  • 打赏
  • 举报
回复
我第一反应,也是#2描述的。 你试试吧 if(!ispostpaback){ circleID = 6; }
  • 打赏
  • 举报
回复
你确定得不到?

 int testID = circleID;
 Response.Write(testID);
const跟static readonly才是只读不变的。。static修饰的字段方法,代表不用实例化类就能直接被调用,你这个是网页,除非要共用这个值,才用static,有个用户更改了这个值,另外个用户得到的值也将得到这个值
zjroland 2020-08-06
  • 打赏
  • 举报
回复
static静态的,不变的,而我需要在Page_Load中修改这个变量的值。
冷月孤峰 2020-08-06
  • 打赏
  • 举报
回复

protected void Page_Load(object sender, System.EventArgs e)
{
if(!ispostpaback){
circleID = 6;
}
}
欧皇神降术 2020-08-06
  • 打赏
  • 举报
回复
这是网页 你load的时候是个实例。然后你网页点击的时候是会产生一个新的实例。加个static就好了
1. 使用QueryString变量   QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子:   a.ASPx的C#代码 private void Button1_Click(object sender, System.EventArgs e) { string s_url; s_url = "b.aspx?name=" + Label1.Text; Response.Redirect(s_url); } b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) { Label2.Text = Request.QueryString["name"]; }   2. 使用Application 对象变量   Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。 a.aspx的C#代码 private void Button1_Click(object sender, System.EventArgs e) { Application["name"] = Label1.Text; Server.Transfer("b.aspx"); } b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) { string name; Application.Lock(); name = Application["name"].ToString(); Application.UnLock(); }   3. 使用Session变量   想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。 a.aspx的C#代码 private void Button1_Click(object sender, System.EventArgs e) { Session["name"] = Label.Text; } b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) { string name; name = Session["name"].ToString(); }   4. 使用Cookie对象变量   这个也是大家常使用的方法,与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合Asp.Net内置对象Request来使用。 a.aspx的C#代码 private void Button1_Click(object sender, System.EventArgs e) { HttpCookie cookie_name = new HttpCookie("name"); cookie_name.Value = Label1.Text; Reponse.AppendCookie(cookie_name); Server.Transfer("b.aspx"); } b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) { string name; name = Request.Cookie["name"].Value.ToString(); }

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧