很简单的一个问题.看看各位的思路类a里有个int类型变量temp=0 在程序的运行过程中它的值变为50在按钮事件中要访问temp.于是写了以下代码a obja = new a();
Response.Write(obja.temp.ToString());因为obja是实例化出来的所以访问obja.temp的时候temp的值为0请教很弱的一个问题.如何能访问到在a类里值为50的temp? 100分~
Response.Write(obja.temp.ToString());因为obja是实例化出来的所以访问obja.temp的时候temp的值为0请教很弱的一个问题.如何能访问到在a类里值为50的temp? 100分~
----------------
如果你想保存50,可以保存到viewstate、session中
Response.Write(obja.temp.ToString());
--------
对了,你这个obja是新new的1个实例,所以值肯定是默认值0
如果没有代码修改obja.temp的值,那这个值就永远保持为0
-------------------------------------------------------------
类a里有个int类型变量temp=0 在程序的运行过程中它的值变为50
@ antoniusguo(anton)
如果没有代码修改obja.temp的值,那这个值就永远保持为0
-------------------------------------------------------------
类a里有个int类型变量temp=0 在程序的运行过程中它的值变为50
-----------------------------------------------------------------
那等它变成50了再取不就行了???被楼主搞晕了!
把你a的代码贴出来看看!!!
{
public int temp = 50;
}public partial class filetest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
a obja = new a();
Response.Write(obja.temp ); }
}
結果輸入是 50,沒有問題。但在 b/s開發裡,不兗許出現在如下情況
public class a
{
public int temp = 50;
}public partial class filetest : System.Web.UI.Page
{
a obja;
protected void Page_Load(object sender, EventArgs e)
{
if (! IsPostBack)
{
obja = new a();
Response.Write(obja.temp);
}
}
//因為,這個事件觸發時,整個頁會重新刷新,
//原來在 Load裡實
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(obja.temp);
}
}
{
public int temp = 50;
}public partial class filetest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
a obja = new a();
Response.Write(obja.temp ); }
}
結果輸入是 50,沒有問題。但在 b/s開發裡,不兗許出現在如下情況
public class a
{
public int temp = 50;
}public partial class filetest : System.Web.UI.Page
{
a obja;
protected void Page_Load(object sender, EventArgs e)
{
if (! IsPostBack)
{
obja = new a();
Response.Write(obja.temp);
}
}
//因為,這個事件觸發時,整個頁會重新刷新,
//原來在 Load裡實的對像已不存在
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(obja.temp);//所以,這裡將報錯,obja沒有實例化
}
}如果你想保存obja的狀態,所以這如下做。
[System.Serializable]
public class a
{
public int temp = 50;
}public partial class filetest : System.Web.UI.Page
{
a obja;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
obja = new a(); ViewState["obja_save"] = obja; Response.Write(obja.temp);
} } protected void Button1_Click(object sender, EventArgs e)
{
obja = (a)ViewState["obja_save"];
Response.Write(obja.temp);
}
public class a
{
public a()
{};
public int temp = 0;
public void function()
{
temp=50;
}
}
在Page_Load的时候
a obja = new a();
访问obja.temp肯定是0了后来按2楼的意思把temp=50存储到Session中,代码:
HttpContext.Current.Session.Add("temp",temp);在调试的时候temp的值为50,运行到上面这句代码提示空引用异常.
**************************************function();可以确定temp的值为50
----------------
如果你想保存50,可以保存到viewstate、session中
要保存一個對像成員也要 obja.temp嘛
[System.Serializable]
public class a
{
public int temp = 50;
}public partial class filetest : System.Web.UI.Page
{
a obja;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
obja = new a();
Response.Write(obja.temp); //輸出50
obja.temp = 100;
ViewState["obja_save"] = obja; //保存整個對像
} } protected void Button1_Click(object sender, EventArgs e)
{
obja = (a)ViewState["obja_save"];//把對像還原過來
Response.Write(obja.temp);//輸出 100
}//樓主注意基礎知道的學習
Public temp As Integer
Sub New()
temp = 50
End Sub
End Class访问时
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.Write(New Class1().temp)
End Sub
Response.Write(obja.temp); //輸出50
obja.temp = 100;
ViewState["obja_save"] = obja; //保存整個對像
-----------------------------------------------------------
Response.Write(obja.temp); //輸出50----------这样是访问到了temp的初始值50
你的obja.temp = 100;是在Page_Load中赋的值.这样做肯定可以访问到值为100
而我的temp=100是在类里给它赋值的//现在是想通过Page_Load访问类里的100你的例子我明白.类里声明temp->Page_Load改变值->其他事件访问到改变的值我的是 类里声明temp->类里改变temp的值->其他事件访问到改变的值
每回送一次,整修個頁對像就要重新構造,
所以,原來的數據對像全部還原,Load事件也將會重新再次執行,
不同的是,IsPostBack 將會為 true.
要保存頁面狀態有很多方法, cookie,session,request,viewstate等等
樓主先去了解一下這知識吧
class a
{
private StateBag viewstate;
public a(StateBag viewstate) { this.viewstate = viewstate;}
public int Temp
{
get{return (int)this.viewstate["a.temp"]}
set{this.viewstate["a.temp"] = value;}
}
}
private int temp;
public int Temp
{
get
{
return temp;
}
set
{
if(temp!=value)
temp=value;
}
}
//其他页面
a obja = new a();
Response.Write(obja.temp.ToString());
类里改变temp的值?什麼時候改?能在類裡改,為什麼不能在外面改?只要提供公共方法或者屬性就可以了。
---------------------------------------------------------------------------------
页面触发事件->事件访问类->类中读取某个文件的大小给变量->页面触发第2个事件通过Page_Load访问这个类的变量,在客户端显示这个文件的大小...我不知道这样是不是说清楚了...
------------------------------------------
//其他页面
a obja = new a();
Response.Write(obja.temp.ToString());这里读取到的obja.temp.ToString()是temp的初始值0..不是已经改变的50
public class a
{
public int temp = 50;
public void setTemp()
{
temp = 330;//假設獲取的文件大小是330;
}}public partial class filetest : System.Web.UI.Page
{
a obja;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
obja = new a();
Response.Write(obja.temp); //輸出50
obja.temp = 100;
ViewState["obja_save"] = obja;
} }
protected void Button1_Click(object sender, EventArgs e)
{
obja = (a)ViewState["obja_save"];
obja.setTemp();
ViewState["obja_save"] = obja;
}
protected void Button2_Click(object sender, EventArgs e)
{
obja = (a)ViewState["obja_save"];
Response.Write(obja.temp);//輸出 330 }
還有更好的辦法,就是,你的獲取文件大小方法直接返回這個文件大小 size,這個文件小在size page裡 用 veiwstate保存。
如:
public class a
{
public int getTemp()
{
return 330;//假設獲取的文件大小是330;
}
}public partial class filetest : System.Web.UI.Page
{
public int Size
{
get {
if (ViewState["size"]!=null && ViewState["size"].ToString() != string.Empty)
{
return Convert.ToInt32(ViewState["size"]);
}
else {
return 0;
} }
set {
ViewState["size"] = value;
}
} //第一個事件訪問類
protected void Button1_Click(object sender, EventArgs e)
{
this.Size =(new a()).getTemp();
} //第二個獲取這個類結果並顯示
protected void Button2_Click(object sender, EventArgs e)
{
Response.Write(this.Size);
}
提示HttpContext.Current空引用异常
后来我把外面的一个线程注释掉就可以正常存储了也没出现异常了.不知道是怎么回事把temp的值存储到Session以后下面一行代码:string str=Session["temp"].ToString();
可以发现str的值确实为新的值50 !接下来通过xmlhttp访问临时页面getSessionInfo.aspx的Page_LoadPage_Load代码也很简单:
判断Session不为空的时候
Response.Write(Session["temp"].ToString());
调试的时候发现编译器没有执行这句,而且Session["temp"].ToString()的值也是Null
怀疑是Session无意中丢失了值.但是多次运行都是这样的结果.再次请教各位!
我們開發裡,基本不用session,萬不得已,也就用 cookies,
<script language="javascript" type="text/javascript">
// JScript 文件var xmlHttp;
function createXMLHttpRequest() {//如果是IE,用activexobject
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} //如果其它浏览器就用XMLHttpRequest
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
//开始函数
function requestServer()
{
window.setInterval('startRequest()',1000);
}function startRequest() {
createXMLHttpRequest();
//创建一个新的http请求,并指定此请求的方法、URL以及验证信息
xmlHttp.open("GET",'GetFileInfo.aspx', true);
//指定当readyState属性改变时执行的函数
xmlHttp.onreadystatechange = handleStateChange;
//发送请求到http服务器并接收回应
xmlHttp.send(null);
}function handleStateChange() {
//4数据接收完毕
if(xmlHttp.readyState == 4) {
//200返回请求状态为OK
if(xmlHttp.status == 200) {
//弹出对话框,并输入内容
try{
//alert(xmlHttp.responseText);
document.getElementById("fileUploadState").innerHTML+=xmlHttp.responseText;
}
catch(e)
{
document.all['fileUploadState'].innerHTML=e;
}
}
}
}
</script>----------------------------------------------------------------------------
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["temp"] != null)
{
Response.Write(ViewState["temp"].ToString());
}
else
{
Response.Write("0");
}
}
viewstate,後一個例子,是保存從對像的一個方法裡返回的值到viewstate裡。用不著在自己创建的类里是支持ViewState的。
2。你這個問題與 viewstate沒有關系的呀,如果你不信,你直接在Page_Load事件裡來個
Response.Write("abcd");試試,也沒有反應。這是你應用 ajax的問題,建議你采用ajaxpro。
viewstate,後一個例子,是保存從對像的一個方法裡返回的值到viewstate裡。用不著在自己创建的类里是支持ViewState的。
2。你這個問題與 viewstate沒有關系的呀,如果你不信,你直接在Page_Load事件裡來個
Response.Write( "abcd ");試試,也沒有反應。這是你應用 ajax的問題,建議你采用ajaxpro。
------------------------------------------------------------------------------------
同意