全局变量赋值问题

问题描述

声明了全局变量,在page_load中赋予某个值,但是Repeater的ItemDataBound读取不到新的值publicstringstrProductTypeID="a";protectedvoidPage_Load(objectsender,EventArgse){strProductTypeID="temp";}protectedvoidrptProductBrand_ItemDataBound(objectsender,RepeaterItemEventArgse){Response.Write(strProductTypeID);}为什么显示的内容为a,不是page_load中赋值的temp呢,要在ItemDataBound中使用全局变量怎么办啊

解决方案

解决方案二:
在关键位置打几个断点就知道了
解决方案三:
如果就你这代码的话,不可能会有这种情况,如果你这是多次页面响应,那你可以试着将你的全局变量改为viewstate来保持
解决方案四:
数据绑定事件本身就是在Page_Load之前,当然不会执行赋值了#2说的我没懂,每个页面都是一个类,无论打开执行多少次这个页面,都不会影响到这个变量值,为什么需要viewstate保存呢?
解决方案五:
补充3楼至少要在OnInit事件之前,也就是说OnPreInit事件完成赋值也可以先不绑定,然后在Page_Load中对控件进行数据绑定,从而引发事件
解决方案六:
stringTableSwitch="Root";protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){//设置初始排序项目和方向ViewState["SortOrder"]="Format";ViewState["OrderDire"]="DESC";//height=//RandomName();bind();}}

我这样声明的TableSwitch都没有问题,可以在这个CS里面通用。
解决方案七:
首先Page_Load运行优先于ItemDataBound事件。楼上#3楼说法是错误的。其次,你没有运行到strProductTypeID="temp";只有2种可能。第一:由于ItemDataBound事件是在数据绑定时才出发的(也就是Repeater1.DataBind();时出发)。换句话说,你在Page_load事件里增加Repeater1.DataBind();,那么在Repeater1.DataBind();此行之后的代码,会在ItemDataBound事件执行完,才继续执行page_load的其他代码。因此,你可能是将strProductTypeID="temp";写在了DataBind事件之后了。第二:可能你根本没有DataBind事件,所以也就不会出发strProductTypeID="temp";,那么这样的话,你的itemdatabound应该也不会触发了。附上我的测试代码前台:<asp:RepeaterID="Repeater1"runat="server"OnItemDataBound="Repeater1_ItemDataBound"><ItemTemplate><asp:TextBoxID="TextBox1"runat="server"></asp:TextBox></ItemTemplate></asp:Repeater>

后台:publicstringa="123";privatevoidPage_Load(objectsender,EventArgse){a="234566";//写在Repeater1.DataBind();之前,就会在ItemDataBound之前运行。DataTabledt=newDataTable();DataRowdr;//Definethecolumnsofthetable.dt.Columns.Add(newDataColumn("IntegerValue",typeof(Int32)));dt.Columns.Add(newDataColumn("StringValue",typeof(String)));dt.Columns.Add(newDataColumn("CurrencyValue",typeof(double)));//Populatethetablewithsamplevalues.for(inti=0;i<9;i++){dr=dt.NewRow();dr[0]=i;dr[1]="Descriptionforitem"+i.ToString();dr[2]=1.23*(i+1);dt.Rows.Add(dr);}DataViewdv=newDataView(dt);Repeater1.DataSource=dt;Repeater1.DataBind();a="234566";//写在Repeater1.DataBind();之后,就会在ItemDataBound之后才运行。}protectedvoidRepeater1_ItemDataBound(objectsender,RepeaterItemEventArgse){if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){TextBoxPriceLabel=(TextBox)e.Item.FindControl("TextBox1");PriceLabel.Text=a;}}

解决方案八:
赋初值应该在Page_Init,目测你这里不需要重写OnInit(),在Init事件触发前赋值
解决方案九:
不要以为MS搞个Init事件是摆设,用处大着呢

时间: 2024-08-05 07:29:11

全局变量赋值问题的相关文章

ajax给全局变量赋值问题解决示例

 ajax默认是异步请求,如果要在$.ajax({里面给全局变量赋值,需要改为同步操作,即加上async : false,就可以了 今天在做项目时,遇到了一个问题.我用的是ajax,要在$.ajax({里面给一个全局变量赋值,结果死活赋值不上,纠结了好半天,后来上网查了查,才知道,ajax默认是异步请求,(当要赋值时,此时的值没有拿到,所以赋值不成功)如果要在$.ajax({里面给全局变量赋值,需要改为同步操作,即加上async : false,就可以了.     代码如下: $.ajax({ 

浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法

 本篇文章主要是对jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,这时很有可能是因为你用的是ajax的异步调用async:true(默认情况),如:    代码如下: function ManageCommentText(text) { var result = te

ajax给全局变量赋值问题解决示例_AJAX相关

今天在做项目时,遇到了一个问题.我用的是ajax,要在$.ajax({里面给一个全局变量赋值,结果死活赋值不上,纠结了好半天,后来上网查了查,才知道,ajax默认是异步请求,(当要赋值时,此时的值没有拿到,所以赋值不成功)如果要在$.ajax({里面给全局变量赋值,需要改为同步操作,即加上async : false,就可以了. 复制代码 代码如下: $.ajax({ type:"post", url:"a.action", data: {}, dataType: '

解决Ajax全局变量赋值的问题

        在做项目的过程中,以下代码:在1处a为0.然后通过一个ajax请求一个值为1的data赋予a,在2处a为1.然后来到3这里的时候,a还是为0.通过查找网络,得出原因是ajax默认的是异步传输数据,在2处的a的scope只在ajax方法内部. //1 var a = 0; $.ajaxSetup({ async : false }); $.get("a.action", function(data) { //2 a = data; alert(a); }); //3 al

JQuery中使用Ajax赋值给全局变量失败异常的解决方法_jquery

我们在用JQuery的Ajax从后台提取数据后想把它赋值给全局变量,但是却怎么都赋不进,为什么呢? 原因其实很简单,我们用的Ajax是异步操作,也就是说在你赋值的时候数据还没提取出来,你当然赋不进去,所以只要改成同步操作就行~ 方法1:先设置同步在进行Ajax操作 //在全局或某个需要的函数内设置Ajax异步为false,也就是同步 $.ajaxSetup({ async :false}); //然后再进行你的Ajax操作 $.post(地址,参数,function(data, status){

angularjs 设置全局变量的3种方法

AngularJS自身有二种,设置全局变量的方法,在加上js的设置全局变量的方法,总共有三种.要实现的功能是,在ng-app中定义的全局变量,在不同的ng-controller里都可以使用. 1,通过var 直接定义global variable,这根纯js是一样的. 2,用angularjs value来设置全局变量 . 3,用angularjs constant来设置全局变量 . 下面用一个例子,来说明,上面3种方法: Java代码   'use strict';   /* App Modu

Angularjs 设置全局变量的方法总结_基础知识

AngularJS 设置全局变量的三种方法 angularjs自身有二种,设置全局变量的方法,在加上js的设置全局变量的方法,总共有三种.要实现的功能是,在ng-app中定义的全局变量,在不同的ng-controller里都可以使用. 1,通过var 直接定义global variable,这根纯js是一样的. 2,用angularjs value来设置全局变量 . 3,用angularjs constant来设置全局变量 . 下面用一个例子,来说明,上面3种方法: 实例: 1,在app模块中,

浅谈const变量赋值报错分析_C 语言

从变量到常量的赋值是合法C++的语法约定的, 如从char 到const char顺畅: 但从char **到 const char **编译器就会报错: 复制代码 代码如下: error: invalid conversion from `char**' to `const char**' 示例: int main(int argc, char *argv[]) { char a = '1'; const char b = a; char * a2 = "12345"; const

图片-C# 变量赋值与改变问题

问题描述 C# 变量赋值与改变问题 如上面的图片所示 将一个全局变量players[n]赋值给局部变量player 然后对局部变量play进行设置 赋值 然后发现全局变量players[n]也跟着改变了 这是为什么? 解决方案 这还用说吗,最基本的,你没有搞清楚引用类型的赋值,先上图 引用类型变量的赋值: 引用类型变量中保存的是"指向实际数据的引用指针".在进行赋值操作的时候,它和值类型一样,也是先有一个复制的操作,不过它复制的不是实际的数据,而是引用(真实数据的内存地址). 所以引用